diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1cb4be6fed..e574be9669 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,6 @@ on: - develop # TODO: Should we run on all pushes to release branches, or should we run on GitHub releases? - 'release-*' - - 'v3' schedule: # Run every day at 12pm (PST) - cron uses UTC times - cron: '0 8 * * *' @@ -27,7 +26,6 @@ env: IS_NOT_FORK: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }} DEVELOP: ${{ (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && (github.head_ref || github.ref_name) == 'develop' }} RELEASE: ${{ (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && startsWith(github.head_ref || github.ref_name, 'release-') }} - V3: ${{ (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && (github.head_ref || github.ref_name) == 'v3' }} jobs: pwa-kit: @@ -35,14 +33,14 @@ jobs: fail-fast: false matrix: node: [16, 18] - npm: [7, 8, 9] + npm: [8, 9] runs-on: ubuntu-latest env: # The "default" npm is the one that ships with a given version of node. # For more: https://nodejs.org/en/download/releases/ # (We also use this env var for making sure a step runs once for the current node version) IS_DEFAULT_NPM: ${{ (matrix.node == 16 && matrix.npm == 8) || (matrix.node == 18 && matrix.npm == 9) }} - # The current recommended version for Managed Runtime: + # The current recommended version for Managed Runtime: # https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/upgrade-node-version.html IS_MRT_NODE: ${{ matrix.node == 16 && matrix.npm == 8 }} steps: @@ -74,7 +72,7 @@ jobs: uses: "./.github/actions/smoke_tests" - name: Create MRT credentials file - if: env.IS_NOT_FORK == 'true' && env.IS_MRT_NODE == 'true' && ( env.DEVELOP == 'true' || env.RELEASE == 'true' || env.V3 == 'true' ) + if: env.IS_NOT_FORK == 'true' && env.IS_MRT_NODE == 'true' && ( env.DEVELOP == 'true' || env.RELEASE == 'true' ) uses: "./.github/actions/create_mrt" with: mobify_user: ${{ secrets.MOBIFY_CLIENT_USER }} @@ -86,13 +84,6 @@ jobs: with: CWD: "./packages/template-retail-react-app" TARGET: staging - - - name: Push Bundle to MRT (v3) - if: env.IS_NOT_FORK == 'true' && env.IS_MRT_NODE == 'true' && env.V3 == 'true' - uses: "./.github/actions/push_to_mrt" - with: - CWD: "./packages/template-retail-react-app" - TARGET: staging-v3 - name: Push Bundle to MRT (Production) if: env.IS_NOT_FORK == 'true' && env.IS_MRT_NODE == 'true' && env.RELEASE == 'true' @@ -134,13 +125,13 @@ jobs: fail-fast: false matrix: node: [16, 18] - npm: [7, 8, 9] + npm: [8, 9] env: # The "default" npm is the one that ships with a given version of node. # For more: https://nodejs.org/en/download/releases/ # (We also use this env var for making sure a step runs once for the current node version) IS_DEFAULT_NPM: ${{ (matrix.node == 16 && matrix.npm == 8) || (matrix.node == 18 && matrix.npm == 9) }} - # The current recommended version for Managed Runtime: + # The current recommended version for Managed Runtime: # https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/upgrade-node-version.html IS_MRT_NODE: ${{ matrix.node == 16 && matrix.npm == 8 }} runs-on: windows-latest diff --git a/.gitignore b/.gitignore index 86d285f055..f299cc8dc9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ packages/*/out packages/*/docs/www lerna-debug.log .idea/ -.vscode/ \ No newline at end of file +.vscode/ +*.orig diff --git a/lerna.json b/lerna.json index 2b3f540e71..ea1550170c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.8.0-dev", + "version": "3.0.0-dev", "packages": [ "packages/*" ] diff --git a/package-lock.json b/package-lock.json index a246d7d48e..dc5c368b2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pwa-kit", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pwa-kit", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "hasInstallScript": true, "devDependencies": { "commander": "^2.20.3", @@ -16,8 +16,8 @@ "shelljs": "^0.8.5" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } }, "node_modules/@babel/code-frame": { @@ -177,9 +177,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", - "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", "dev": true, "peer": true, "engines": { @@ -925,9 +925,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "engines": { "node": ">=14" @@ -1074,9 +1074,9 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1136,12 +1136,15 @@ } }, "node_modules/@npmcli/package-json": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.0.0.tgz", - "integrity": "sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.1.0.tgz", + "integrity": "sha512-qNPy6Yf9ruFST99xcrl5EWAvrb7qFrwgVbwdzcTJlIgxbArKOq5e/bgZ6rTL1X9hDgAdPbvL8RWx/OTLSB0ToA==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^3.0.0" + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -1442,9 +1445,9 @@ } }, "node_modules/@octokit/core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz", + "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==", "dev": true, "dependencies": { "@octokit/auth-token": "^3.0.0", @@ -1474,9 +1477,9 @@ } }, "node_modules/@octokit/graphql": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { "@octokit/request": "^6.0.0", @@ -1488,9 +1491,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.1.1.tgz", - "integrity": "sha512-/X7Gh/qWiWaooJmUnYD48SYy72fyrk2ceisOSe89JojK7r0j8YrTwYpDi76kI+c6QiqX1KSgdoBTMJvktsDkYw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz", + "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ==", "dev": true }, "node_modules/@octokit/plugin-enterprise-rest": { @@ -1570,9 +1573,9 @@ } }, "node_modules/@octokit/request": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", + "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==", "dev": true, "dependencies": { "@octokit/endpoint": "^7.0.0", @@ -1616,12 +1619,12 @@ } }, "node_modules/@octokit/types": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.1.tgz", - "integrity": "sha512-Vx4keMiD/CAiwVFasLcH0xBSVbKIHebIZke9i7ZbUWGNN4vJFWSYH6Nvga7UY9NIJCGa6x3QG849XTbi5wYmkA==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz", + "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^17.1.1" + "@octokit/openapi-types": "^17.2.0" } }, "node_modules/@parcel/watcher": { @@ -1708,9 +1711,9 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1753,9 +1756,9 @@ "dev": true }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.43", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.43.tgz", - "integrity": "sha512-AhFF3mIDfA+jEwQv2WMHmiYhOvmdbh2qhUkDVQfiqzQtUwS4BgoWwom5NpSPg4Ix5vOul+w1690Bt21CkVLpgg==", + "version": "3.0.0-rc.44", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.44.tgz", + "integrity": "sha512-UVAt9Icc8zfGXioeYJ8XMoSTxOYVmlal2TRNxy9Uh91taS72kQFalK7LpIslcvEBKy4XtarmfIwcFIU3ZY64lw==", "dev": true, "dependencies": { "js-yaml": "^3.10.0", @@ -2121,9 +2124,9 @@ } }, "node_modules/bin-links/node_modules/signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "engines": { "node": ">=14" @@ -2227,9 +2230,9 @@ } }, "node_modules/cacache": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.0.tgz", - "integrity": "sha512-hXpFU+Z3AfVmNuiLve1qxWHMq0RSIt5gjCKAHi/M6DktwFwDdAXAtunl1i4WSKaaVcU9IsRvXFg42jTHigcC6Q==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", @@ -2594,6 +2597,45 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", @@ -3096,16 +3138,16 @@ } }, "node_modules/eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", "dev": true, "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.40.0", + "@eslint/js": "8.41.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3125,13 +3167,12 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -3571,9 +3612,9 @@ } }, "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "engines": { "node": ">=14" @@ -3870,15 +3911,15 @@ } }, "node_modules/glob": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", - "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.6.tgz", + "integrity": "sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", "path-scurry": "^1.7.0" }, "bin": { @@ -3914,9 +3955,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -3970,10 +4011,10 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "peer": true }, @@ -4366,9 +4407,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4567,9 +4608,9 @@ } }, "node_modules/jackspeak": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", - "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -4585,15 +4626,15 @@ } }, "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "version": "10.8.6", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz", + "integrity": "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==", "dev": true, "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" @@ -4602,17 +4643,6 @@ "node": ">=10" } }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5088,21 +5118,6 @@ "node": ">=8" } }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/libnpmpublish/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -5466,10 +5481,16 @@ } }, "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } }, "node_modules/meow/node_modules/locate-path": { "version": "5.0.0", @@ -5483,6 +5504,33 @@ "node": ">=8" } }, + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/meow/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5551,6 +5599,12 @@ "node": ">=8" } }, + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5563,6 +5617,15 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -5572,15 +5635,6 @@ "node": ">=8" } }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", @@ -6091,42 +6145,18 @@ } }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-bundled": { @@ -6975,9 +7005,9 @@ } }, "node_modules/pacote/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -6998,21 +7028,6 @@ "node": ">=8" } }, - "node_modules/pacote/node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/pacote/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -7211,13 +7226,13 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", - "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", "dev": true, "dependencies": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -7333,9 +7348,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -8061,9 +8076,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8170,9 +8185,9 @@ "dev": true }, "node_modules/sigstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.4.0.tgz", - "integrity": "sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.5.2.tgz", + "integrity": "sha512-X95v6xAAooVpn7PaB94TDmFeSO5SBfCtB1R23fvzr36WTfjtkiiyOeei979nbTjc8nzh6FSLeltQZuODsm1EjQ==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", @@ -8748,18 +8763,19 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", "dev": true }, "node_modules/tuf-js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.5.tgz", - "integrity": "sha512-inqodgxdsmuxrtQVbu6tPNgRKWD1Boy3VB6GO7KczJZpAHiTukwhSzXUSzvDcw5pE2Jo8ua+e1ykpHv7VdPVlQ==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.6.tgz", + "integrity": "sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg==", "dev": true, "dependencies": { "@tufjs/models": "1.0.4", + "debug": "^4.3.4", "make-fetch-happen": "^11.1.0" }, "engines": { @@ -9394,9 +9410,9 @@ } }, "@eslint/js": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", - "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", "dev": true, "peer": true }, @@ -9981,9 +9997,9 @@ } }, "signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true }, "ssri": { @@ -10092,9 +10108,9 @@ } }, "minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -10137,12 +10153,15 @@ "dev": true }, "@npmcli/package-json": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.0.0.tgz", - "integrity": "sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.1.0.tgz", + "integrity": "sha512-qNPy6Yf9ruFST99xcrl5EWAvrb7qFrwgVbwdzcTJlIgxbArKOq5e/bgZ6rTL1X9hDgAdPbvL8RWx/OTLSB0ToA==", "dev": true, "requires": { - "json-parse-even-better-errors": "^3.0.0" + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.1" } }, "@npmcli/promise-spawn": { @@ -10330,9 +10349,9 @@ } }, "@octokit/core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz", + "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==", "dev": true, "requires": { "@octokit/auth-token": "^3.0.0", @@ -10356,9 +10375,9 @@ } }, "@octokit/graphql": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "requires": { "@octokit/request": "^6.0.0", @@ -10367,9 +10386,9 @@ } }, "@octokit/openapi-types": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.1.1.tgz", - "integrity": "sha512-/X7Gh/qWiWaooJmUnYD48SYy72fyrk2ceisOSe89JojK7r0j8YrTwYpDi76kI+c6QiqX1KSgdoBTMJvktsDkYw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz", + "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ==", "dev": true }, "@octokit/plugin-enterprise-rest": { @@ -10439,9 +10458,9 @@ } }, "@octokit/request": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", + "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==", "dev": true, "requires": { "@octokit/endpoint": "^7.0.0", @@ -10476,12 +10495,12 @@ } }, "@octokit/types": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.1.tgz", - "integrity": "sha512-Vx4keMiD/CAiwVFasLcH0xBSVbKIHebIZke9i7ZbUWGNN4vJFWSYH6Nvga7UY9NIJCGa6x3QG849XTbi5wYmkA==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz", + "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==", "dev": true, "requires": { - "@octokit/openapi-types": "^17.1.1" + "@octokit/openapi-types": "^17.2.0" } }, "@parcel/watcher": { @@ -10545,9 +10564,9 @@ } }, "minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -10586,9 +10605,9 @@ "dev": true }, "@yarnpkg/parsers": { - "version": "3.0.0-rc.43", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.43.tgz", - "integrity": "sha512-AhFF3mIDfA+jEwQv2WMHmiYhOvmdbh2qhUkDVQfiqzQtUwS4BgoWwom5NpSPg4Ix5vOul+w1690Bt21CkVLpgg==", + "version": "3.0.0-rc.44", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.44.tgz", + "integrity": "sha512-UVAt9Icc8zfGXioeYJ8XMoSTxOYVmlal2TRNxy9Uh91taS72kQFalK7LpIslcvEBKy4XtarmfIwcFIU3ZY64lw==", "dev": true, "requires": { "js-yaml": "^3.10.0", @@ -10860,9 +10879,9 @@ "dev": true }, "signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true }, "write-file-atomic": { @@ -10939,9 +10958,9 @@ "dev": true }, "cacache": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.0.tgz", - "integrity": "sha512-hXpFU+Z3AfVmNuiLve1qxWHMq0RSIt5gjCKAHi/M6DktwFwDdAXAtunl1i4WSKaaVcU9IsRvXFg42jTHigcC6Q==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "requires": { "@npmcli/fs": "^3.1.0", @@ -11232,6 +11251,38 @@ "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + } } }, "conventional-changelog-preset-loader": { @@ -11608,16 +11659,16 @@ "peer": true }, "eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", "dev": true, "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.40.0", + "@eslint/js": "8.41.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -11637,13 +11688,12 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -11966,9 +12016,9 @@ }, "dependencies": { "signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true } } @@ -12207,15 +12257,15 @@ } }, "glob": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", - "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.6.tgz", + "integrity": "sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==", "dev": true, "requires": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", "path-scurry": "^1.7.0" }, "dependencies": { @@ -12229,9 +12279,9 @@ } }, "minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -12279,10 +12329,10 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "peer": true }, @@ -12582,9 +12632,9 @@ } }, "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "requires": { "has": "^1.0.3" @@ -12723,9 +12773,9 @@ "dev": true }, "jackspeak": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", - "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", @@ -12733,24 +12783,17 @@ } }, "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "version": "10.8.6", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz", + "integrity": "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==", "dev": true, "requires": { "async": "^3.2.3", "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "filelist": "^1.0.4", + "minimatch": "^3.1.2" } }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "peer": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13125,18 +13168,6 @@ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, - "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, "npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -13421,10 +13452,13 @@ } }, "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "locate-path": { "version": "5.0.0", @@ -13435,6 +13469,27 @@ "p-locate": "^4.1.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -13465,6 +13520,12 @@ "type-fest": "^0.6.0" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -13477,6 +13538,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -13504,12 +13571,6 @@ } } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", @@ -13899,35 +13960,15 @@ } }, "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, "npm-bundled": { @@ -14579,9 +14620,9 @@ } }, "minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -14593,18 +14634,6 @@ "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true }, - "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, "npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", @@ -14764,13 +14793,13 @@ "dev": true }, "path-scurry": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", - "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", "dev": true, "requires": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" }, "dependencies": { "lru-cache": { @@ -14848,9 +14877,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -15385,9 +15414,9 @@ "dev": true }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -15468,9 +15497,9 @@ "dev": true }, "sigstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.4.0.tgz", - "integrity": "sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.5.2.tgz", + "integrity": "sha512-X95v6xAAooVpn7PaB94TDmFeSO5SBfCtB1R23fvzr36WTfjtkiiyOeei979nbTjc8nzh6FSLeltQZuODsm1EjQ==", "dev": true, "requires": { "@sigstore/protobuf-specs": "^0.1.0", @@ -15915,18 +15944,19 @@ } }, "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", "dev": true }, "tuf-js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.5.tgz", - "integrity": "sha512-inqodgxdsmuxrtQVbu6tPNgRKWD1Boy3VB6GO7KczJZpAHiTukwhSzXUSzvDcw5pE2Jo8ua+e1ykpHv7VdPVlQ==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.6.tgz", + "integrity": "sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg==", "dev": true, "requires": { "@tufjs/models": "1.0.4", + "debug": "^4.3.4", "make-fetch-happen": "^11.1.0" }, "dependencies": { diff --git a/package.json b/package.json index 2543d62472..11033e7d9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pwa-kit", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "scripts": { "bump-version": "node ./scripts/bump-version.js", "publish-to-npm": "node ./scripts/publish-to-npm.js", @@ -22,7 +22,7 @@ "shelljs": "^0.8.5" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } } diff --git a/packages/commerce-sdk-react/CHANGELOG.md b/packages/commerce-sdk-react/CHANGELOG.md index 025b51a3a0..3fd4fa9dfc 100644 --- a/packages/commerce-sdk-react/CHANGELOG.md +++ b/packages/commerce-sdk-react/CHANGELOG.md @@ -1,16 +1,31 @@ -## v2.8.0-dev (Mar 03, 2023) -- Add missing cache invalidation for contexts/customers/login/order [#1073](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1073) +## v3.0.0-dev (May 12, 2023) + +- Upgrade React 18, React DOM 18, @types/react@18, @types/react-dom@v18 Testing library 14 [#1166](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1166) + +## v2.7.1 (May 11, 2023) + +- Re-generate lock files and fix hook lib tests [#1186](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1186) +- Add additional properties to ShopperLogin test types [#1185](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1185) +- Add missing cache invalidation for contexts/customers/login/order [#1073](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1073) +- Fix Shopper Baskets Test case [#1082](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1082) +- Implement remaining Shopper Baskets cache logic [#1070](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1070) +- Decode pre-fetched token and save auth data in storage [#1052](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1052) +- Allow query hook parameters to be null. [#1046](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1046) +- Implement updateCustomerPassword as no-op. [#1031](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1031) + ## v2.7.0 (Mar 03, 2023) -- Add Page/Region/Component components for shopper experience/page designer page rendering [#963](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/963) -- Namespace `Auth` storage keys with site identifier to allow multi-site support [#911](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/911) -- Add Shopper Experience `usePage` and `usePages` hooks[#958](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/958) + +- Add Page/Region/Component components for shopper experience/page designer page rendering [#963](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/963) +- Namespace `Auth` storage keys with site identifier to allow multi-site support [#911](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/911) +- Add Shopper Experience `usePage` and `usePages` hooks[#958](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/958) ## v2.6.0 (Jan 25, 2023) ## v2.5.0 (Jan 05, 2023) -- Exclude test files in package file to avoid publishing them [#856](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/856) -- Pass in 'headers' and 'rawResponse' options to mutation hooks [#845](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/845) -- Commerce hooks: basket mutations [#834](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/834) -- Remove overriding of params in mutation hooks [#859](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/859) + +- Exclude test files in package file to avoid publishing them [#856](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/856) +- Pass in 'headers' and 'rawResponse' options to mutation hooks [#845](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/845) +- Commerce hooks: basket mutations [#834](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/834) +- Remove overriding of params in mutation hooks [#859](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/859) ## v2.4.0 (Dec 01, 2022) diff --git a/packages/commerce-sdk-react/package-lock.json b/packages/commerce-sdk-react/package-lock.json index d4cb4f047e..49f7969873 100644 --- a/packages/commerce-sdk-react/package-lock.json +++ b/packages/commerce-sdk-react/package-lock.json @@ -1,12 +1,12 @@ { "name": "commerce-sdk-react-preview", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "commerce-sdk-react-preview", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "See license in LICENSE", "dependencies": { "commerce-sdk-isomorphic": "^1.10.1", @@ -16,21 +16,20 @@ "devDependencies": { "@tanstack/react-query": "^4.28.0", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^12.1.5", - "@testing-library/react-hooks": "^8.0.1", + "@testing-library/react": "^14.0.0", "@types/js-cookie": "^3.0.3", "@types/jsonwebtoken": "^8.5.9", "@types/jwt-decode": "^3.1.0", "@types/node": "^14.18.40", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.1", "@types/react-helmet": "^6.1.6", "cross-env": "^5.2.1", "jsonwebtoken": "^8.5.1", "nock": "^13.3.0", "nodemon": "^2.0.22", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "semver": "^7.3.8", "shelljs": "^0.8.5", @@ -38,15 +37,15 @@ "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "optionalDependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "@tanstack/react-query": "^4", - "react": "^17", + "react": "^18", "react-helmet": "6" } }, @@ -238,9 +237,9 @@ "dev": true }, "node_modules/@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true, "funding": { "type": "github", @@ -248,12 +247,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "dependencies": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -275,9 +274,9 @@ } }, "node_modules/@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", + "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -286,11 +285,11 @@ "aria-query": "^5.0.0", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/@testing-library/dom/node_modules/chalk": { @@ -332,51 +331,21 @@ } }, "node_modules/@testing-library/react": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", - "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0", - "@types/react-dom": "<18.0.0" + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { - "react": "<18.0.0", - "react-dom": "<18.0.0" - } - }, - "node_modules/@testing-library/react-hooks": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", - "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "react-error-boundary": "^3.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0", - "react": "^16.9.0 || ^17.0.0", - "react-dom": "^16.9.0 || ^17.0.0", - "react-test-renderer": "^16.9.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-test-renderer": { - "optional": true - } + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/@types/aria-query": { @@ -477,9 +446,9 @@ } }, "node_modules/@types/node": { - "version": "14.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.46.tgz", - "integrity": "sha512-n4yVT5FuY5NCcGHCosQSGvvCT74HhowymPN2OEcsHPw6U1NuxV9dvxWbrM2dnBukWjdMYzig1WfIkWdTTQJqng==", + "version": "14.18.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.47.tgz", + "integrity": "sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==", "dev": true }, "node_modules/@types/prop-types": { @@ -489,9 +458,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -500,12 +469,12 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "dependencies": { - "@types/react": "^17" + "@types/react": "*" } }, "node_modules/@types/react-helmet": { @@ -1034,13 +1003,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1139,6 +1109,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1303,9 +1285,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1998,9 +1980,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.10.tgz", - "integrity": "sha512-5YytjUVbwzjE/BX4N62vnPPkGNxlJPwdA9/ArUc4pcM6cYS4Hinuv4VazzwjMGgnWuiQqcemOanib/5PpcsGug==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2111,6 +2093,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -2271,50 +2254,32 @@ "dev": true }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-boundary": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", - "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": ">=16.13.1" + "react": "^18.2.0" } }, "node_modules/react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "node_modules/react-helmet": { @@ -2445,18 +2410,17 @@ ] }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2977,25 +2941,25 @@ "dev": true }, "@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true }, "@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "requires": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" } }, "@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", + "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -3004,7 +2968,7 @@ "aria-query": "^5.0.0", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "dependencies": { @@ -3038,24 +3002,14 @@ } }, "@testing-library/react": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", - "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", "dev": true, "requires": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0", - "@types/react-dom": "<18.0.0" - } - }, - "@testing-library/react-hooks": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", - "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "react-error-boundary": "^3.1.0" + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" } }, "@types/aria-query": { @@ -3148,9 +3102,9 @@ } }, "@types/node": { - "version": "14.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.46.tgz", - "integrity": "sha512-n4yVT5FuY5NCcGHCosQSGvvCT74HhowymPN2OEcsHPw6U1NuxV9dvxWbrM2dnBukWjdMYzig1WfIkWdTTQJqng==", + "version": "14.18.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.47.tgz", + "integrity": "sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==", "dev": true }, "@types/prop-types": { @@ -3160,9 +3114,9 @@ "dev": true }, "@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -3171,12 +3125,12 @@ } }, "@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "requires": { - "@types/react": "^17" + "@types/react": "*" } }, "@types/react-helmet": { @@ -3591,13 +3545,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -3669,6 +3624,12 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -3785,9 +3746,9 @@ "dev": true }, "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "requires": { "has": "^1.0.3" @@ -4318,9 +4279,9 @@ } }, "node-fetch": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.10.tgz", - "integrity": "sha512-5YytjUVbwzjE/BX4N62vnPPkGNxlJPwdA9/ArUc4pcM6cYS4Hinuv4VazzwjMGgnWuiQqcemOanib/5PpcsGug==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -4393,7 +4354,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "devOptional": true }, "object-inspect": { "version": "1.12.3", @@ -4513,37 +4475,26 @@ "dev": true }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-boundary": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", - "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5" + "scheduler": "^0.23.0" } }, "react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "react-helmet": { @@ -4634,18 +4585,17 @@ "dev": true }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "requires": { "lru-cache": "^6.0.0" diff --git a/packages/commerce-sdk-react/package.json b/packages/commerce-sdk-react/package.json index 1977be2a6e..00efc72134 100644 --- a/packages/commerce-sdk-react/package.json +++ b/packages/commerce-sdk-react/package.json @@ -1,6 +1,6 @@ { "name": "commerce-sdk-react-preview", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "description": "A library that provides react hooks for fetching data from Commerce Cloud", "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/ecom-react-hooks#readme", "bugs": { @@ -47,23 +47,22 @@ "devDependencies": { "@tanstack/react-query": "^4.28.0", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^12.1.5", - "@testing-library/react-hooks": "^8.0.1", + "@testing-library/react": "^14.0.0", "@types/js-cookie": "^3.0.3", "@types/jsonwebtoken": "^8.5.9", "@types/jwt-decode": "^3.1.0", "@types/node": "^14.18.40", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.1", "@types/react-helmet": "^6.1.6", "cross-env": "^5.2.1", - "internal-lib-build": "2.8.0-dev", + "internal-lib-build": "3.0.0-dev", "jsonwebtoken": "^8.5.1", "nock": "^13.3.0", "nodemon": "^2.0.22", - "pwa-kit-dev": "2.8.0-dev", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "pwa-kit-dev": "3.0.0-dev", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "semver": "^7.3.8", "shelljs": "^0.8.5", @@ -72,15 +71,15 @@ }, "peerDependencies": { "@tanstack/react-query": "^4", - "react": "^17", + "react": "^18", "react-helmet": "6" }, "optionalDependencies": { "prop-types": "^15.8.1" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "publishConfig": { "directory": "dist" diff --git a/packages/commerce-sdk-react/src/auth/index.test.ts b/packages/commerce-sdk-react/src/auth/index.test.ts index 9335810329..bb1c5ed8a0 100644 --- a/packages/commerce-sdk-react/src/auth/index.test.ts +++ b/packages/commerce-sdk-react/src/auth/index.test.ts @@ -67,9 +67,9 @@ describe('Auth', () => { expect(auth.get('refresh_token_guest')).toBe(refreshToken) expect(auth.get('access_token')).toBe(accessToken) // @ts-expect-error private property - expect([...auth.stores['cookie'].map.keys()]).toEqual([`siteId_cc-nx-g`]) + expect([...auth.stores['cookie'].map.keys()]).toEqual([`cc-nx-g_siteId`]) // @ts-expect-error private property - expect([...auth.stores['local'].map.keys()]).toEqual([`siteId_access_token`]) + expect([...auth.stores['local'].map.keys()]).toEqual([`access_token_siteId`]) }) test('set registered refresh token will clear guest refresh token, vise versa', () => { const auth = new Auth(config) @@ -300,7 +300,7 @@ describe('Auth', () => { // @ts-expect-error private method authA.set('refresh_token_guest', refreshTokenGuest) // @ts-expect-error private property - expect([...authA.stores['memory'].map.keys()]).toEqual([`siteA_cc-nx-g`]) + expect([...authA.stores['memory'].map.keys()]).toEqual([`cc-nx-g_siteA`]) // Create a second auth instance and ensure that its memory store has previous // guest tokens set from the first store (this emulates a second lambda request.) @@ -309,7 +309,7 @@ describe('Auth', () => { authB.set('refresh_token_guest', refreshTokenGuest) // @ts-expect-error private property - expect([...authB.stores['memory'].map.keys()]).toEqual([`siteA_cc-nx-g`, `siteB_cc-nx-g`]) + expect([...authB.stores['memory'].map.keys()]).toEqual([`cc-nx-g_siteA`, `cc-nx-g_siteB`]) // Set mock value back to expected. // @ts-expect-error read-only property diff --git a/packages/commerce-sdk-react/src/auth/index.ts b/packages/commerce-sdk-react/src/auth/index.ts index 2f5b4b6998..ecf75c7bb7 100644 --- a/packages/commerce-sdk-react/src/auth/index.ts +++ b/packages/commerce-sdk-react/src/auth/index.ts @@ -24,6 +24,7 @@ interface AuthConfig extends ApiClientConfigParams { proxy: string fetchOptions?: ShopperLoginTypes.FetchOptions fetchedToken?: string + OCAPISessionsURL?: string } interface JWTHeaders { @@ -79,7 +80,7 @@ const DATA_MAP: AuthDataMap = { key: 'customer_id' }, usid: { - storageType: 'local', + storageType: 'cookie', key: 'usid' }, enc_user_id: { @@ -138,6 +139,7 @@ class Auth { private REFRESH_TOKEN_EXPIRATION_DAYS = 90 private stores: Record private fetchedToken: string + private OCAPISessionsURL: string constructor(config: AuthConfig) { this.client = new ShopperLogin({ @@ -163,9 +165,9 @@ class Auth { fetchOptions: config.fetchOptions }) - const storageOptions = {keyPrefix: config.siteId} + const storageOptions = {keySuffix: config.siteId} const serverStorageOptions = { - keyPrefix: config.siteId, + keySuffix: config.siteId, sharedContext: true // This allows use to reused guest authentication tokens accross lambda runs. } @@ -185,6 +187,8 @@ class Auth { this.redirectURI = config.redirectURI this.fetchedToken = config.fetchedToken || '' + + this.OCAPISessionsURL = config.OCAPISessionsURL || '' } get(name: AuthDataKeys) { @@ -272,7 +276,9 @@ class Auth { .then(async () => { const token = await fn() this.handleTokenResponse(token, isGuest) - + if (onClient() && this.OCAPISessionsURL) { + void this.createOCAPISession() + } // Q: Why don't we just return token? Why re-construct the same object again? // A: because a user could open multiple tabs and the data in memory could be out-dated // We must always grab the data from the storage (cookie/localstorage) directly @@ -430,6 +436,26 @@ class Auth { return this.loginGuestUser() } + /** + * Make a post request to the OCAPI /session endpoint to bridge the session. + * + * The HTTP response contains a set-cookie header which sets the dwsid session cookie. + * This cookie is used on SFRA, and it allows shoppers to navigate between SFRA and + * this PWA site seamlessly; this is often used to enable hybrid deployment. + * + * (Note: this method is client side only, b/c MRT doesn't support set-cookie header right now) + * + * @returns {Promise} + */ + createOCAPISession() { + return fetch(this.OCAPISessionsURL, { + method: 'POST', + headers: { + Authorization: this.get('access_token') + } + }) + } + /** * Decode SLAS JWT and extract information such as customer id, usid, etc. * diff --git a/packages/commerce-sdk-react/src/auth/storage.test.ts b/packages/commerce-sdk-react/src/auth/storage.test.ts index 4dc5ed9536..99ec28ed4d 100644 --- a/packages/commerce-sdk-react/src/auth/storage.test.ts +++ b/packages/commerce-sdk-react/src/auth/storage.test.ts @@ -24,14 +24,13 @@ const testCases = [ { description: 'MemoryStorage works with options', storageOptions: { - keyPrefix: 'prefix', - keyPrefixSeparator: '$' + keySuffix: 'suffix' }, validate: (storage: BaseStorage) => { storage.set(key, value) expect(storage.get(key)).toBe(value) // @ts-expect-error private property - expect([...storage.map.keys()]).toEqual([`prefix$${key}`]) + expect([...storage.map.keys()]).toEqual([`${key}_suffix`]) storage.delete(key) expect(storage.get(key)).toBe('') } diff --git a/packages/commerce-sdk-react/src/auth/storage.ts b/packages/commerce-sdk-react/src/auth/storage.ts index a6cab30a27..fee1dcae68 100644 --- a/packages/commerce-sdk-react/src/auth/storage.ts +++ b/packages/commerce-sdk-react/src/auth/storage.ts @@ -9,25 +9,23 @@ import Cookies from 'js-cookie' export type StorageType = 'cookie' | 'local' | 'memory' export interface BaseStorageOptions { - keyPrefix?: string - keyPrefixSeparator?: string + keySuffix?: string } export interface MemoryStorageOptions extends BaseStorageOptions { sharedContext?: boolean } export abstract class BaseStorage { - protected options: Required + protected options: BaseStorageOptions = {} - constructor(options: BaseStorageOptions = {keyPrefixSeparator: '_'}) { + constructor(options?: BaseStorageOptions) { this.options = { - keyPrefixSeparator: options.keyPrefix ? options.keyPrefixSeparator ?? '_' : '', - keyPrefix: options.keyPrefix ?? '' + keySuffix: options?.keySuffix ?? '' } } - protected getPrefixedKey(key: string): string { - return `${this.options.keyPrefix}${this.options.keyPrefixSeparator}${key}` + protected getSuffixedKey(key: string): string { + return this.options.keySuffix ? `${key}_${this.options.keySuffix}` : key } abstract set(key: string, value: string, options?: unknown): void abstract get(key: string): string @@ -49,16 +47,16 @@ export class CookieStorage extends BaseStorage { } } set(key: string, value: string, options?: Cookies.CookieAttributes) { - const prefixedKey = this.getPrefixedKey(key) - Cookies.set(prefixedKey, value, {...options, secure: true}) + const suffixedKey = this.getSuffixedKey(key) + Cookies.set(suffixedKey, value, {...options, secure: true}) } get(key: string) { - const prefixedKey = this.getPrefixedKey(key) - return Cookies.get(prefixedKey) || '' + const suffixedKey = this.getSuffixedKey(key) + return Cookies.get(suffixedKey) || '' } delete(key: string) { - const prefixedKey = this.getPrefixedKey(key) - Cookies.remove(prefixedKey) + const suffixedKey = this.getSuffixedKey(key) + Cookies.remove(suffixedKey) } } @@ -77,26 +75,26 @@ export class LocalStorage extends BaseStorage { } } set(key: string, value: string) { - const prefixedKey = this.getPrefixedKey(key) - const oldValue = this.get(prefixedKey) - window.localStorage.setItem(prefixedKey, value) + const oldValue = this.get(key) + const suffixedKey = this.getSuffixedKey(key) + window.localStorage.setItem(suffixedKey, value) const event = new StorageEvent('storage', { - key: prefixedKey, + key: suffixedKey, oldValue: oldValue, newValue: value }) window.dispatchEvent(event) } get(key: string) { - const prefixedKey = this.getPrefixedKey(key) - return window.localStorage.getItem(prefixedKey) || '' + const suffixedKey = this.getSuffixedKey(key) + return window.localStorage.getItem(suffixedKey) || '' } delete(key: string) { - const prefixedKey = this.getPrefixedKey(key) - const oldValue = this.get(prefixedKey) - window.localStorage.removeItem(prefixedKey) + const suffixedKey = this.getSuffixedKey(key) + const oldValue = this.get(suffixedKey) + window.localStorage.removeItem(suffixedKey) const event = new StorageEvent('storage', { - key: prefixedKey, + key: suffixedKey, oldValue: oldValue, newValue: null }) @@ -114,15 +112,15 @@ export class MemoryStorage extends BaseStorage { this.map = options?.sharedContext ? globalMap : new Map() } set(key: string, value: string) { - const prefixedKey = this.getPrefixedKey(key) - this.map.set(prefixedKey, value) + const suffixedKey = this.getSuffixedKey(key) + this.map.set(suffixedKey, value) } get(key: string) { - const prefixedKey = this.getPrefixedKey(key) - return this.map.get(prefixedKey) || '' + const suffixedKey = this.getSuffixedKey(key) + return this.map.get(suffixedKey) || '' } delete(key: string) { - const prefixedKey = this.getPrefixedKey(key) - this.map.delete(prefixedKey) + const suffixedKey = this.getSuffixedKey(key) + this.map.delete(suffixedKey) } } diff --git a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/mutation.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/mutation.test.ts index e24ed5e6ed..1eb74e5c19 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/mutation.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/mutation.test.ts @@ -178,7 +178,7 @@ const emptyResponseTestCases = [ const allTestCases = [...nonEmptyResponseTestCases, ...emptyResponseTestCases] describe('ShopperBaskets mutations', () => { - const storedCustomerIdKey = `${DEFAULT_TEST_CONFIG.siteId}_customer_id` + const storedCustomerIdKey = `customer_id_${DEFAULT_TEST_CONFIG.siteId}` beforeAll(() => { // Make sure we don't accidentally overwrite something before setting up our test state if (window.localStorage.length > 0) throw new Error('Unexpected data in local storage.') @@ -193,23 +193,23 @@ describe('ShopperBaskets mutations', () => { '`%s` returns data on success', async (mutationName, options) => { mockMutationEndpoints(basketsEndpoint, oldBasket) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperBasketsMutation(mutationName) }) expect(result.current.data).toBeUndefined() act(() => result.current.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(oldBasket) } ) test.each(allTestCases)('`%s` returns error on error', async (mutationName, options) => { mockMutationEndpoints(basketsEndpoint, {error: true}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperBasketsMutation(mutationName) }) expect(result.current.error).toBeNull() act(() => result.current.mutate(options)) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) // Validate that we get a `ResponseError` from commerce-sdk-isomorphic. Ideally, we could do // `.toBeInstanceOf(ResponseError)`, but the class isn't exported. :\ expect(result.current.error).toHaveProperty('response') @@ -220,16 +220,16 @@ describe('ShopperBaskets mutations', () => { mockQueryEndpoint(basketsEndpoint, oldBasket) // getBasket mockQueryEndpoint(customersEndpoint, oldCustomerBaskets) // getCustomerBaskets mockMutationEndpoints(basketsEndpoint, newBasket) // this mutation - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ basket: queries.useBasket(getBasketOptions), customerBaskets: useCustomerBaskets(getCustomerBasketsOptions), mutation: useShopperBasketsMutation(mutationName) })) - await waitAndExpectSuccess(wait, () => result.current.basket) + await waitAndExpectSuccess(() => result.current.basket) expect(result.current.basket.data).toEqual(oldBasket) expect(result.current.customerBaskets.data).toEqual(oldCustomerBaskets) act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) assertUpdateQuery(result.current.basket, newBasket) assertUpdateQuery(result.current.customerBaskets, newCustomerBaskets) } @@ -240,17 +240,17 @@ describe('ShopperBaskets mutations', () => { mockQueryEndpoint(basketsEndpoint, oldBasket) // getBasket mockQueryEndpoint(customersEndpoint, oldCustomerBaskets) // getCustomerBaskets mockMutationEndpoints(basketsEndpoint, {error: true}, 400) // this mutation - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ basket: queries.useBasket(getBasketOptions), customerBaskets: useCustomerBaskets(getCustomerBasketsOptions), mutation: useShopperBasketsMutation(mutationName) })) - await waitAndExpectSuccess(wait, () => result.current.basket) + await waitAndExpectSuccess(() => result.current.basket) expect(result.current.basket.data).toEqual(oldBasket) expect(result.current.customerBaskets.data).toEqual(oldCustomerBaskets) expect(result.current.mutation.error).toBeNull() act(() => result.current.mutation.mutate(options)) - await waitAndExpectError(wait, () => result.current.mutation) + await waitAndExpectError(() => result.current.mutation) // Validate that we get a `ResponseError` from commerce-sdk-isomorphic. Ideally, we could do // `.toBeInstanceOf(ResponseError)`, but the class isn't exported. :\ expect(result.current.mutation.error).toHaveProperty('response') @@ -263,12 +263,12 @@ describe('ShopperBaskets mutations', () => { async (mutationName, options) => { // Almost the standard 'returns data' test, just a different return type mockMutationEndpoints(basketsEndpoint, oldBasket) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperBasketsMutation(mutationName) }) expect(result.current.data).toBeUndefined() act(() => result.current.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toBeUndefined() } ) @@ -277,18 +277,18 @@ describe('ShopperBaskets mutations', () => { const [mutationName, options] = deleteTestCase mockQueryEndpoint(basketsEndpoint, oldBasket) // getBasket mockQueryEndpoint(customersEndpoint, oldCustomerBaskets) // getCustomerBaskets - mockMutationEndpoints(basketsEndpoint, newBasket) // this mutation + mockMutationEndpoints(basketsEndpoint, newBasket) // tshis mutation mockQueryEndpoint(customersEndpoint, deletedCustomerBaskets) // getCustomerBaskets refetch - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ basket: queries.useBasket(getBasketOptions), customerBaskets: useCustomerBaskets(getCustomerBasketsOptions), mutation: useShopperBasketsMutation(mutationName) })) - await waitAndExpectSuccess(wait, () => result.current.basket) + await waitAndExpectSuccess(() => result.current.basket) expect(result.current.basket.data).toEqual(oldBasket) expect(result.current.customerBaskets.data).toEqual(oldCustomerBaskets) act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) assertRemoveQuery(result.current.basket) assertInvalidateQuery(result.current.customerBaskets, oldCustomerBaskets) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/query.test.ts index dc69a2ca7d..9ca491b249 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/query.test.ts @@ -11,6 +11,7 @@ import { waitAndExpectError, waitAndExpectSuccess } from '../../test-utils' + import {Argument} from '../types' import * as queries from './query' @@ -46,18 +47,18 @@ describe('Shopper Baskets query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(basketsEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(basketsEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperContexts/mutation.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperContexts/mutation.test.ts index 307b21acb3..8cb529534f 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperContexts/mutation.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperContexts/mutation.test.ts @@ -68,19 +68,19 @@ describe('Shopper Contexts mutation hooks', () => { // raml updated. mockMutationEndpoints(contextEndpoint, {}, 201) // createShopperContext - const {result, /* rerender, */ waitForValueToChange} = renderHookWithProviders(() => ({ + const {result /* rerender, */} = renderHookWithProviders(() => ({ mutation: useShopperContextsMutation('createShopperContext'), query: queries.useShopperContext(queryOptions) })) // 1. Populate cache with initial data expect(result.current.query.error).toBeNull() - await waitAndExpectError(waitForValueToChange, () => result.current.query) + await waitAndExpectError(() => result.current.query) expect(result.current.query.error).toHaveProperty('response') // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual({}) // FIXME: This probably isn't working because the createContext API has changes to not @@ -100,19 +100,19 @@ describe('Shopper Contexts mutation hooks', () => { mockQueryEndpoint(contextEndpoint, newContext) // getShopperContext mockMutationEndpoints(contextEndpoint, updatedContext) // createShopperContext - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ mutation: useShopperContextsMutation('updateShopperContext'), query: queries.useShopperContext(queryOptions) })) // 1. Populate cache with initial data expect(result.current.query.error).toBeNull() - await waitAndExpectSuccess(waitForValueToChange, () => result.current.query) + await waitAndExpectSuccess(() => result.current.query) expect(result.current.query.data).toEqual(newContext) // 2. Do update mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(updatedContext) }) @@ -121,19 +121,19 @@ describe('Shopper Contexts mutation hooks', () => { mockQueryEndpoint(contextEndpoint, newContext) // getShopperContext mockMutationEndpoints(contextEndpoint, updatedContext) // createShopperContext - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ mutation: useShopperContextsMutation('deleteShopperContext'), query: queries.useShopperContext(queryOptions) })) // 1. Populate cache with initial data expect(result.current.query.error).toBeNull() - await waitAndExpectSuccess(waitForValueToChange, () => result.current.query) + await waitAndExpectSuccess(() => result.current.query) expect(result.current.query.data).toEqual(newContext) // 2. Do delete mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toBeUndefined() }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperContexts/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperContexts/query.test.ts index ef5933b695..831e217b7c 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperContexts/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperContexts/query.test.ts @@ -39,18 +39,18 @@ describe('Shopper Contexts query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(contextsEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(contextsEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperCustomers/mutation.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperCustomers/mutation.test.ts index 869d339db0..b2d0706725 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperCustomers/mutation.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperCustomers/mutation.test.ts @@ -91,7 +91,7 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, customer) // getCustomer mockMutationEndpoints(customersEndpoint, data) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('createCustomerAddress'), @@ -101,13 +101,13 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(customer) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(data) assertUpdateQuery(result.current.query, data) }) @@ -128,7 +128,7 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, customer) // getCustomer mockMutationEndpoints(customersEndpoint, data) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('createCustomerPaymentInstrument'), @@ -138,13 +138,13 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(customer) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(data) assertUpdateQuery(result.current.query, data) }) @@ -157,20 +157,20 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, data) // query mockMutationEndpoints(customersEndpoint, {}) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('deleteCustomerPaymentInstrument'), query: queries.useCustomerPaymentInstrument(queryOptions) })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(customer) expect(result.current.query.data).toEqual(data) // 2. Do deletion mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toBeUndefined() assertRemoveQuery(result.current.query) }) @@ -183,20 +183,20 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, queryData) // query mockMutationEndpoints(customersEndpoint, {}) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('removeCustomerAddress'), query: queries.useCustomerAddress(queryOptions) })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(customer) expect(result.current.query.data).toEqual(queryData) // 2. Do deletion mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toBeUndefined() assertRemoveQuery(result.current.query) }) @@ -211,19 +211,19 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, oldAddress) // query mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // query refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('updateCustomer'), query: queries.useCustomerAddress(queryOptions) })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(oldCustomer) // 2. Do update mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(newCustomer) assertUpdateQuery(result.current.customer, newCustomer) }) @@ -241,20 +241,20 @@ describe('ShopperCustomers mutations', () => { mockMutationEndpoints(customersEndpoint, newData) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomer refetch mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerAddress refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ customer: queries.useCustomer(queryOptions), mutation: useShopperCustomersMutation('updateCustomerAddress'), query: queries.useCustomerAddress(queryOptions) })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.customer) + await waitAndExpectSuccess(() => result.current.customer) expect(result.current.customer.data).toEqual(customer) expect(result.current.query.data).toEqual(oldData) // 2. Do mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(newData) assertUpdateQuery(result.current.query, newData) }) @@ -279,7 +279,7 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, listResult) // getCustomerProductLists mockMutationEndpoints(customersEndpoint, data) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ lists: queries.useCustomerProductLists(queryOptions), mutation: useShopperCustomersMutation('createCustomerProductList'), @@ -289,13 +289,13 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(data) expect(result.current.lists.data).toEqual(newlistResult) assertUpdateQuery(result.current.query, data) @@ -318,7 +318,7 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, oldList) // getCustomerProductList mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ lists: queries.useCustomerProductLists(queryOptions), mutation: useShopperCustomersMutation('updateCustomerProductList'), @@ -328,13 +328,13 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(newList) expect(result.current.lists.data).toEqual(newListResult) }) @@ -346,7 +346,7 @@ describe('ShopperCustomers mutations', () => { mockQueryEndpoint(customersEndpoint, listResult) // getCustomerProductLists mockMutationEndpoints(customersEndpoint, data) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ lists: queries.useCustomerProductLists(queryOptions), mutation: useShopperCustomersMutation('deleteCustomerProductList'), @@ -356,13 +356,13 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(data) expect(result.current.lists.data).toEqual(emptyListResult) }) @@ -384,7 +384,7 @@ describe('ShopperCustomers mutations', () => { mockMutationEndpoints(customersEndpoint, data) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch mockQueryEndpoint(customersEndpoint, {test: 'use this? should not be!'}) // getCustomerProductLists refetch - const {result, waitForValueToChange} = renderHookWithProviders( + const {result} = renderHookWithProviders( (props: {enabled: boolean} = {enabled: false}) => ({ list: queries.useCustomerProductList(queryOptions), lists: queries.useCustomerProductLists(queryOptions), @@ -395,14 +395,14 @@ describe('ShopperCustomers mutations', () => { ) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.list.data).toEqual(list) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toBeUndefined() // 2. Do creation mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(data) expect(result.current.list.data).toEqual(newList) expect(result.current.lists.data).toEqual(newListResult) @@ -427,7 +427,7 @@ describe('ShopperCustomers mutations', () => { mockMutationEndpoints(customersEndpoint, {}) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch mockQueryEndpoint(customersEndpoint, {test: 'use this? should not be!'}) // getCustomerProductLists refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ list: queries.useCustomerProductList(queryOptions), lists: queries.useCustomerProductLists(queryOptions), mutation: useShopperCustomersMutation('deleteCustomerProductListItem'), @@ -435,14 +435,14 @@ describe('ShopperCustomers mutations', () => { })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.list.data).toEqual(list) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toEqual(data) // 2. Do deletion mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toBeUndefined() expect(result.current.list.data).toEqual(newList) expect(result.current.lists.data).toEqual(newListResult) @@ -473,7 +473,7 @@ describe('ShopperCustomers mutations', () => { mockMutationEndpoints(customersEndpoint, newData) // this mutation mockQueryEndpoint(customersEndpoint, {test: 'this should not get used'}) // getCustomerProductList refetch mockQueryEndpoint(customersEndpoint, {test: 'use this? should not be!'}) // getCustomerProductLists refetch - const {result, waitForValueToChange} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ list: queries.useCustomerProductList(queryOptions), lists: queries.useCustomerProductLists(queryOptions), mutation: useShopperCustomersMutation('updateCustomerProductListItem'), @@ -481,14 +481,14 @@ describe('ShopperCustomers mutations', () => { })) // 1. Populate cache with initial data - await waitAndExpectSuccess(waitForValueToChange, () => result.current.lists) + await waitAndExpectSuccess(() => result.current.lists) expect(result.current.list.data).toEqual(list) expect(result.current.lists.data).toEqual(listResult) expect(result.current.query.data).toEqual(oldData) // 2. Do update mutation act(() => result.current.mutation.mutate(options)) - await waitAndExpectSuccess(waitForValueToChange, () => result.current.mutation) + await waitAndExpectSuccess(() => result.current.mutation) expect(result.current.mutation.data).toEqual(newData) expect(result.current.list.data).toEqual(newList) expect(result.current.lists.data).toEqual(newListResult) @@ -539,11 +539,11 @@ describe('ShopperCustomers mutations', () => { '`%s` returns data on success', async (mutationName, [options, data]) => { mockMutationEndpoints(customersEndpoint, data ?? {}) // Fallback for `void` endpoints - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperCustomersMutation(mutationName) }) act(() => result.current.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) } ) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperCustomers/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperCustomers/query.test.ts index ebb45a6e3a..9d2a6b8541 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperCustomers/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperCustomers/query.test.ts @@ -70,18 +70,18 @@ describe('Shopper Customers query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(customersEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(customersEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperExperience/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperExperience/query.test.ts index bc7b3a4f00..0e735b047c 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperExperience/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperExperience/query.test.ts @@ -40,18 +40,18 @@ describe('Shopper Experience query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(experienceEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(experienceEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperGiftCertificates/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperGiftCertificates/query.test.ts index 87b3089ef3..91870bc1c0 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperGiftCertificates/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperGiftCertificates/query.test.ts @@ -39,18 +39,18 @@ describe('Shopper Gift Certificates query hooks', () => { test.each(testCases)('`%s` returns data on success', async (queryName, data) => { // getGiftCertificate uses POST, so we need the mutation mock helper to mock the right verb mockMutationEndpoints(giftCertificatesEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(giftCertificatesEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperLogin/mutation.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperLogin/mutation.test.ts index ed731a73f2..38563139ee 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperLogin/mutation.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperLogin/mutation.test.ts @@ -90,24 +90,24 @@ describe('ShopperLogin mutations', () => { mockMutationEndpoints(loginEndpoint, data ?? {}) // Fallback for `void` endpoints mockQueryEndpoint(loginEndpoint, data ?? {}) // `customerLogout` uses GET - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperLoginMutation(mutationName) }) expect(result.current.data).toBeUndefined() act(() => result.current.mutate(options)) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) test.each(testCases)('`%s` returns error on error', async (mutationName, [options]) => { mockMutationEndpoints(loginEndpoint, {error: true}, 400) mockQueryEndpoint(loginEndpoint, {error: true}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperLoginMutation(mutationName) }) expect(result.current.error).toBeNull() act(() => result.current.mutate(options)) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) // Validate that we get a `ResponseError` from commerce-sdk-isomorphic. Ideally, we could do // `.toBeInstanceOf(ResponseError)`, but the class isn't exported. :\ expect(result.current.error).toHaveProperty('response') diff --git a/packages/commerce-sdk-react/src/hooks/ShopperLogin/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperLogin/query.test.ts index f73bce7fa1..ebe6783cda 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperLogin/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperLogin/query.test.ts @@ -56,18 +56,18 @@ describe('Shopper Login query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(loginEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(loginEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperOrders/mutation.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperOrders/mutation.test.ts index 83a7281b7e..2bbc3a4b20 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperOrders/mutation.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperOrders/mutation.test.ts @@ -94,7 +94,7 @@ describe('ShopperOrders mutations', () => { beforeEach(() => nock.cleanAll()) test.each(allTestCases)('`%s` returns data on success', async (mutationName, options) => { mockMutationEndpoints(ordersEndpoint, ORDER) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperOrdersMutation(mutationName) }) expect(result.current.data).toBeUndefined() @@ -103,12 +103,12 @@ describe('ShopperOrders mutations', () => { type Opts = Parameters[0] result.current.mutate(options as Opts) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(ORDER) }) test.each(allTestCases)('`%s` returns error on error', async (mutationName, options) => { mockMutationEndpoints(ordersEndpoint, {error: true}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return useShopperOrdersMutation(mutationName) }) expect(result.current.error).toBeNull() @@ -116,7 +116,7 @@ describe('ShopperOrders mutations', () => { type Opts = Parameters[0] result.current.mutate(options as Opts) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) // Validate that we get a `ResponseError` from commerce-sdk-isomorphic. Ideally, we could do // `.toBeInstanceOf(ResponseError)`, but the class isn't exported. :\ expect(result.current.error).toHaveProperty('response') @@ -125,7 +125,7 @@ describe('ShopperOrders mutations', () => { const [mutationName, options] = createTestCase mockMutationEndpoints(ordersEndpoint, ORDER) // createOrder mockQueryEndpoint(ordersEndpoint, ORDER) // getOrder - const {result: mut, waitForValueToChange: wait} = renderHookWithProviders(() => ({ + const {result: mut} = renderHookWithProviders(() => ({ queryClient: useQueryClient(), mutation: useShopperOrdersMutation(mutationName) })) @@ -133,19 +133,19 @@ describe('ShopperOrders mutations', () => { // The query cache should be empty before we do anything expect(cached).toEqual([]) act(() => mut.current.mutation.mutate(options)) - await waitAndExpectSuccess(wait, () => mut.current.mutation) + await waitAndExpectSuccess(() => mut.current.mutation) const {result: query} = renderHookWithProviders(() => // We know `ORDER` has an `orderNo` because we set it, but the `Order` type forgets that // eslint-disable-next-line @typescript-eslint/no-non-null-assertion queries.useOrder({parameters: {orderNo: ORDER.orderNo!}}) ) - await waitAndExpectSuccess(wait, () => query.current) + await waitAndExpectSuccess(() => query.current) expect(query.current.data).toEqual(ORDER) }) test('`createOrder` does not update the cache on error', async () => { const [mutationName, options] = createTestCase mockMutationEndpoints(ordersEndpoint, {error: true}, 400) // createOrder - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => ({ + const {result} = renderHookWithProviders(() => ({ queryClient: useQueryClient(), mutation: useShopperOrdersMutation(mutationName) })) @@ -153,7 +153,7 @@ describe('ShopperOrders mutations', () => { // The query cache should be empty before we do anything expect(getQueries()).toEqual([]) act(() => result.current.mutation.mutate(options)) - await waitAndExpectError(wait, () => result.current.mutation) + await waitAndExpectError(() => result.current.mutation) // The query cache should not have changed expect(getQueries()).toEqual([]) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperOrders/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperOrders/query.test.ts index e3ad58fdbb..67e85c1d5b 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperOrders/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperOrders/query.test.ts @@ -41,18 +41,18 @@ describe('Shopper Orders query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(ordersEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(ordersEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperProducts/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperProducts/query.test.ts index efc6260619..ec630c6d0e 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperProducts/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperProducts/query.test.ts @@ -42,18 +42,18 @@ describe('Shopper Products query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(productsEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(productsEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperPromotions/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperPromotions/query.test.ts index 00295b8b69..eadd07512e 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperPromotions/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperPromotions/query.test.ts @@ -40,18 +40,18 @@ describe('Shopper Promotions query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(promotionsEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(promotionsEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/ShopperSearch/query.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperSearch/query.test.ts index 7a6e17aab6..c93ef32af2 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperSearch/query.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperSearch/query.test.ts @@ -42,18 +42,18 @@ describe('Shopper Search query hooks', () => { }) test.each(testCases)('`%s` returns data on success', async (queryName, data) => { mockQueryEndpoint(searchEndpoint, data) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectSuccess(wait, () => result.current) + await waitAndExpectSuccess(() => result.current) expect(result.current.data).toEqual(data) }) // eslint-disable-next-line jest/expect-expect test.each(testCases)('`%s` returns error on error', async (queryName) => { mockQueryEndpoint(searchEndpoint, {}, 400) - const {result, waitForValueToChange: wait} = renderHookWithProviders(() => { + const {result} = renderHookWithProviders(() => { return queries[queryName](OPTIONS) }) - await waitAndExpectError(wait, () => result.current) + await waitAndExpectError(() => result.current) }) }) diff --git a/packages/commerce-sdk-react/src/hooks/useAccessToken.ts b/packages/commerce-sdk-react/src/hooks/useAccessToken.ts index 288c7bdfcf..60739d40bd 100644 --- a/packages/commerce-sdk-react/src/hooks/useAccessToken.ts +++ b/packages/commerce-sdk-react/src/hooks/useAccessToken.ts @@ -27,7 +27,7 @@ const useAccessToken = (): AccessToken => { ? // This conditional is a constant value based on the environment, so the same path will // always be followed., and the "rule of hooks" is not violated. // eslint-disable-next-line react-hooks/rules-of-hooks - useLocalStorage(`${config.siteId}_access_token`) + useLocalStorage(`access_token_${config.siteId}`) : auth.get('access_token') // NOTE: auth.ready() is to be called later. If you call it immediately in this hook, diff --git a/packages/commerce-sdk-react/src/hooks/useCustomerId.ts b/packages/commerce-sdk-react/src/hooks/useCustomerId.ts index b7a7b4d449..84356d7cb9 100644 --- a/packages/commerce-sdk-react/src/hooks/useCustomerId.ts +++ b/packages/commerce-sdk-react/src/hooks/useCustomerId.ts @@ -21,7 +21,7 @@ const useCustomerId = (): string | null => { // eslint-disable-next-line react-hooks/rules-of-hooks const config = useConfig() // eslint-disable-next-line react-hooks/rules-of-hooks - return useLocalStorage(`${config.siteId}_customer_id`) + return useLocalStorage(`customer_id_${config.siteId}`) } // eslint-disable-next-line react-hooks/rules-of-hooks const auth = useAuthContext() diff --git a/packages/commerce-sdk-react/src/hooks/useEncUserId.ts b/packages/commerce-sdk-react/src/hooks/useEncUserId.ts index 8365d14924..4221746b76 100644 --- a/packages/commerce-sdk-react/src/hooks/useEncUserId.ts +++ b/packages/commerce-sdk-react/src/hooks/useEncUserId.ts @@ -24,7 +24,7 @@ const useEncUserId = (): string | null => { ? // This conditional is a constant value based on the environment, so the same path will // always be followed., and the "rule of hooks" is not violated. // eslint-disable-next-line react-hooks/rules-of-hooks - useLocalStorage(`${config.siteId}_enc_user_id`) + useLocalStorage(`$enc_user_id_${config.siteId}`) : auth.get('enc_user_id') } diff --git a/packages/commerce-sdk-react/src/hooks/useUsid.ts b/packages/commerce-sdk-react/src/hooks/useUsid.ts index 90d9527e81..e238d7783a 100644 --- a/packages/commerce-sdk-react/src/hooks/useUsid.ts +++ b/packages/commerce-sdk-react/src/hooks/useUsid.ts @@ -22,7 +22,7 @@ const useUsid = (): string | null => { ? // This conditional is a constant value based on the environment, so the same path will // always be followed., and the "rule of hooks" is not violated. // eslint-disable-next-line react-hooks/rules-of-hooks - useLocalStorage(`${config.siteId}_usid`) + useLocalStorage(`usid_${config.siteId}`) : auth.get('usid') } diff --git a/packages/commerce-sdk-react/src/provider.tsx b/packages/commerce-sdk-react/src/provider.tsx index 4393892880..db56106cf8 100644 --- a/packages/commerce-sdk-react/src/provider.tsx +++ b/packages/commerce-sdk-react/src/provider.tsx @@ -30,6 +30,7 @@ export interface CommerceApiProviderProps extends ApiClientConfigParams { fetchOptions?: ShopperBasketsTypes.FetchOptions headers?: Record fetchedToken?: string + OCAPISessionsURL?: string } /** @@ -66,7 +67,8 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { shortCode, locale, currency, - fetchedToken + fetchedToken, + OCAPISessionsURL } = props const config = { @@ -117,7 +119,8 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { proxy, redirectURI, fetchOptions, - fetchedToken + fetchedToken, + OCAPISessionsURL }) }, [ clientId, @@ -127,7 +130,8 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { proxy, redirectURI, fetchOptions, - fetchedToken + fetchedToken, + OCAPISessionsURL ]) // Initialize the session diff --git a/packages/commerce-sdk-react/src/test-utils.tsx b/packages/commerce-sdk-react/src/test-utils.tsx index b44e4183c6..13424655e1 100644 --- a/packages/commerce-sdk-react/src/test-utils.tsx +++ b/packages/commerce-sdk-react/src/test-utils.tsx @@ -6,8 +6,7 @@ */ import React from 'react' -import {render, RenderOptions} from '@testing-library/react' -import {renderHook, WaitForValueToChange} from '@testing-library/react-hooks/dom' +import {render, RenderOptions, renderHook, waitFor} from '@testing-library/react' import { QueryClient, QueryClientProvider, @@ -31,7 +30,8 @@ export const DEFAULT_TEST_CONFIG = { siteId: 'RefArchGlobal', locale: 'en-US', currency: 'USD', - fetchedToken: 'test-token' + fetchedToken: 'test-token', + OCAPISessionsURL: `${DEFAULT_TEST_HOST}/mobify/proxy/ocapi/s/RefArch/dw/shop/v22_8/sessions` } export const createQueryClient = () => { @@ -98,6 +98,7 @@ export function renderHookWithProviders( }) } +const NOCK_DELAY = 50 /** Mocks DELETE, PATCH, POST, and PUT so we don't have to look up which verb an endpoint uses. */ export const mockMutationEndpoints = ( matchingPath: string, @@ -108,10 +109,18 @@ export const mockMutationEndpoints = ( // For some reason, re-using scope (i.e. nock() and chained methods) // results in duplicate mocked requests, which breaks our validation // of # of requests used. - nock(DEFAULT_TEST_HOST).delete(matcher).reply(statusCode, response) - nock(DEFAULT_TEST_HOST).patch(matcher).reply(statusCode, response) - nock(DEFAULT_TEST_HOST).put(matcher).reply(statusCode, response) - nock(DEFAULT_TEST_HOST).post(matcher).reply(statusCode, response) + + // For delay(NOCK_DELAY): + // It sucks that we have to do the delay + // but since @react-testing-library/react@14, the waitFor + // method only checks hook result by interval, there is no + // reliable way to trigger waitFor per re-render. + // So we need to give the mocks a small delay to ensure that + // the waitFor have time to catch every re-render. + nock(DEFAULT_TEST_HOST).delete(matcher).delay(NOCK_DELAY).reply(statusCode, response) + nock(DEFAULT_TEST_HOST).patch(matcher).delay(NOCK_DELAY).reply(statusCode, response) + nock(DEFAULT_TEST_HOST).put(matcher).delay(NOCK_DELAY).reply(statusCode, response) + nock(DEFAULT_TEST_HOST).post(matcher).delay(NOCK_DELAY).reply(statusCode, response) } /** Mocks a GET request to an endpoint. */ @@ -121,7 +130,7 @@ export const mockQueryEndpoint = ( statusCode = 200 ) => { const matcher = (uri: string) => uri.includes(matchingPath) - return nock(DEFAULT_TEST_HOST).get(matcher).reply(statusCode, response) + return nock(DEFAULT_TEST_HOST).get(matcher).delay(NOCK_DELAY).reply(statusCode, response) } export const assertUpdateQuery = ( @@ -178,32 +187,38 @@ export const getUnimplementedEndpoints = ( }) return [...unimplemented] } + +// Since @react-testing-library/react@14, the waitFor +// method only checks hook result by interval. Re-renders no longer +// trigger waitFor. The default interval value is 100ms and it is way +// too slow for us to assert value changes per re-render. +// See https://github.com/testing-library/react-hooks-testing-library/blob/chore/migration-guide/MIGRATION_GUIDE.md#waitfor +const WAIT_FOR_INTERVAL = 5 /** Helper type for WaitForValueToChange with hooks */ type GetHookResult = () => | UseQueryResult | UseMutationResult -/** Helper that waits for a hook to finish loading. */ -const waitForHookToFinish = async ( - wait: WaitForValueToChange, - getResult: GetHookResult -) => { - await wait(() => getResult().isSuccess || getResult().isError) -} /** Helper that asserts that a hook is a success. */ export const waitAndExpectSuccess = async ( - wait: WaitForValueToChange, getResult: GetHookResult ) => { - await waitForHookToFinish(wait, getResult) - // Checking the error first gives us the best context for failing tests + // Checking for success first because result is still in loading state when checking for error first + await waitFor( + () => { + expect(getResult().isSuccess).toBe(true) + }, + {interval: WAIT_FOR_INTERVAL} + ) expect(getResult().error).toBeNull() - expect(getResult().isSuccess).toBe(true) } /** Helper that asserts that a hook returned an error */ export const waitAndExpectError = async ( - wait: WaitForValueToChange, getResult: GetHookResult ) => { - await waitForHookToFinish(wait, getResult) - expect(getResult().isError).toBe(true) + await waitFor( + () => { + expect(getResult().isError).toBe(true) + }, + {interval: WAIT_FOR_INTERVAL} + ) } diff --git a/packages/internal-lib-build/package-lock.json b/packages/internal-lib-build/package-lock.json index 8672c1c2d9..658b691fdb 100644 --- a/packages/internal-lib-build/package-lock.json +++ b/packages/internal-lib-build/package-lock.json @@ -1,12 +1,12 @@ { "name": "internal-lib-build", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "internal-lib-build", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@babel/cli": "^7.21.0", @@ -50,8 +50,8 @@ "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "peerDependencies": { "typescript": "4.8.3" @@ -122,9 +122,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "engines": { "node": ">=6.9.0" } @@ -159,9 +159,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "dependencies": { "@babel/types": "^7.21.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -487,9 +487,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1762,13 +1762,13 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -2616,9 +2616,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", "peer": true, "dependencies": { "@types/estree": "*", @@ -2681,9 +2681,9 @@ "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==" }, "node_modules/@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -2714,148 +2714,148 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -2908,9 +2908,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peer": true, "peerDependencies": { "acorn": "^8" @@ -3589,9 +3589,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "funding": [ { "type": "opencollective", @@ -4065,9 +4065,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==" + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==" }, "node_modules/emittery": { "version": "0.7.2", @@ -4102,9 +4102,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz", + "integrity": "sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -4981,9 +4981,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dependencies": { "has": "^1.0.3" }, @@ -6442,9 +6442,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7125,9 +7125,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/node-fetch": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.10.tgz", - "integrity": "sha512-5YytjUVbwzjE/BX4N62vnPPkGNxlJPwdA9/ArUc4pcM6cYS4Hinuv4VazzwjMGgnWuiQqcemOanib/5PpcsGug==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7194,9 +7194,9 @@ } }, "node_modules/node-notifier/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "optional": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7215,9 +7215,9 @@ "optional": true }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -7291,9 +7291,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", - "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "node_modules/object-copy": { "version": "0.1.0", @@ -9136,9 +9136,9 @@ } }, "node_modules/terser": { - "version": "5.17.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.2.tgz", - "integrity": "sha512-1D1aGbOF1Mnayq5PvfMc0amAR1y5Z1nrZaGCvI5xsdEfZEVte8okonk02OiaK5fw5hG1GWuuVsakOnpZW8y25A==", + "version": "5.17.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz", + "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -9154,9 +9154,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", - "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -9353,9 +9353,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, "node_modules/type-check": { "version": "0.3.2", @@ -9666,9 +9666,9 @@ } }, "node_modules/webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", + "version": "5.83.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.83.1.tgz", + "integrity": "sha512-TNsG9jDScbNuB+Lb/3+vYolPplCS3bbEaJf+Bj0Gw4DhP3ioAflBb1flcRt9zsWITyvOhM96wMQNRWlSX52DgA==", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -9680,7 +9680,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -9972,9 +9972,9 @@ } }, "@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==" + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==" }, "@babel/core": { "version": "7.21.8", @@ -9999,9 +9999,9 @@ } }, "@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "requires": { "@babel/types": "^7.21.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -10237,9 +10237,9 @@ } }, "@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==" + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -11062,13 +11062,13 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" } }, "@babel/traverse": { @@ -11734,9 +11734,9 @@ } }, "@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", "peer": true, "requires": { "@types/estree": "*", @@ -11799,9 +11799,9 @@ "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==" }, "@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -11832,148 +11832,148 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "peer": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "peer": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "peer": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "peer": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "peer": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "peer": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "peer": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "peer": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -12016,9 +12016,9 @@ } }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peer": true, "requires": {} }, @@ -12510,9 +12510,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==" + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==" }, "capture-exit": { "version": "2.0.0", @@ -12866,9 +12866,9 @@ } }, "electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==" + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==" }, "emittery": { "version": "0.7.2", @@ -12894,9 +12894,9 @@ } }, "enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz", + "integrity": "sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==", "peer": true, "requires": { "graceful-fs": "^4.2.4", @@ -13561,9 +13561,9 @@ } }, "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "requires": { "has": "^1.0.3" } @@ -14623,9 +14623,9 @@ } }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "requires": { "lru-cache": "^6.0.0" } @@ -14883,7 +14883,7 @@ "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", + "nwsapi": "2.2.2", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", @@ -15133,9 +15133,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-fetch": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.10.tgz", - "integrity": "sha512-5YytjUVbwzjE/BX4N62vnPPkGNxlJPwdA9/ArUc4pcM6cYS4Hinuv4VazzwjMGgnWuiQqcemOanib/5PpcsGug==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" }, @@ -15190,9 +15190,9 @@ } }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "optional": true, "requires": { "lru-cache": "^6.0.0" @@ -15207,9 +15207,9 @@ } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==" }, "normalize-package-data": { "version": "2.5.0", @@ -15270,9 +15270,9 @@ } }, "nwsapi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", - "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "object-copy": { "version": "0.1.0", @@ -16665,9 +16665,9 @@ } }, "terser": { - "version": "5.17.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.2.tgz", - "integrity": "sha512-1D1aGbOF1Mnayq5PvfMc0amAR1y5Z1nrZaGCvI5xsdEfZEVte8okonk02OiaK5fw5hG1GWuuVsakOnpZW8y25A==", + "version": "5.17.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz", + "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==", "peer": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -16685,9 +16685,9 @@ } }, "terser-webpack-plugin": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", - "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", @@ -16818,9 +16818,9 @@ } }, "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, "type-check": { "version": "0.3.2", @@ -17044,9 +17044,9 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", + "version": "5.83.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.83.1.tgz", + "integrity": "sha512-TNsG9jDScbNuB+Lb/3+vYolPplCS3bbEaJf+Bj0Gw4DhP3ioAflBb1flcRt9zsWITyvOhM96wMQNRWlSX52DgA==", "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -17058,7 +17058,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/packages/internal-lib-build/package.json b/packages/internal-lib-build/package.json index bad5b0b901..558eb7ad28 100644 --- a/packages/internal-lib-build/package.json +++ b/packages/internal-lib-build/package.json @@ -1,6 +1,6 @@ { "name": "internal-lib-build", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "private": true, "description": "Build tools for *libraries* in the monorepo", "bugs": { @@ -61,7 +61,7 @@ }, "devDependencies": { "npm-packlist": "^4.0.0", - "pwa-kit-dev": "2.8.0-dev", + "pwa-kit-dev": "3.0.0-dev", "typescript": "4.8.3" }, "peerDependencies": { @@ -73,7 +73,10 @@ } }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" + }, + "overrides": { + "nwsapi": "2.2.2" } } diff --git a/packages/my-extended-retail-app/.gitignore b/packages/my-extended-retail-app/.gitignore deleted file mode 100644 index 5bf1f60976..0000000000 --- a/packages/my-extended-retail-app/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -.nyc_output -build.tar - -coverage -tests/reports -tests/screenshots -tests/lighthouse-reports/ -lighthouse/audit* -.lighthouseci - -.tern-port -app/integration-manager/docs -messaging/*.csr - -# Local App Configuration Files -config/local.* - -# Elastic Beanstalk Files -.elasticbeanstalk/* -!.elasticbeanstalk/*.cfg.yml -!.elasticbeanstalk/*.global.yml - -build/ -tmp/ -*.log -node_modules - -# Generated files -app/cache-hash-manifest.json -app/loader-cache-hash-manifest.json - -.vscode diff --git a/packages/my-extended-retail-app/README.md b/packages/my-extended-retail-app/README.md deleted file mode 100644 index 5468329a6d..0000000000 --- a/packages/my-extended-retail-app/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Steps - -1. `npm i full-icu@^1.3.1 pwa-kit-dev cross-env` diff --git a/packages/my-extended-retail-app/babel.config.js b/packages/my-extended-retail-app/babel.config.js deleted file mode 100644 index c865361ef4..0000000000 --- a/packages/my-extended-retail-app/babel.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -module.exports = require('pwa-kit-dev/configs/babel/babel-config') diff --git a/packages/my-extended-retail-app/pwa-kit-overrides/app/main.jsx b/packages/my-extended-retail-app/pwa-kit-overrides/app/main.jsx deleted file mode 100644 index 167c23b9dc..0000000000 --- a/packages/my-extended-retail-app/pwa-kit-overrides/app/main.jsx +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -import {start, registerServiceWorker} from 'pwa-kit-react-sdk/ssr/browser/main' - -const main = () => { - // The path to your service worker should match what is set up in ssr.js - return Promise.all([start(), registerServiceWorker('/worker.js')]) -} - -main() diff --git a/packages/my-extended-retail-app/pwa-kit-overrides/app/pages/my-new-route/index.jsx b/packages/my-extended-retail-app/pwa-kit-overrides/app/pages/my-new-route/index.jsx deleted file mode 100644 index 053c6ac949..0000000000 --- a/packages/my-extended-retail-app/pwa-kit-overrides/app/pages/my-new-route/index.jsx +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2023, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import React from 'react' - -const MyNewRoute = () => { - return

hello new route!

-} - -export default MyNewRoute diff --git a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/img/hero.png b/packages/my-extended-retail-app/pwa-kit-overrides/app/static/img/hero.png deleted file mode 100644 index abe393f45d..0000000000 Binary files a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/img/hero.png and /dev/null differ diff --git a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/manifest.json b/packages/my-extended-retail-app/pwa-kit-overrides/app/static/manifest.json deleted file mode 100644 index a58ce4beac..0000000000 --- a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "example.com", - "short_name": "example.com", - "start_url": "/?homescreen=1", - "background_color": "#fff", - "theme_color": "#4e439b", - "display": "standalone", - "icons": [ - { - "src": "./img/global/app-icon-192.png", - "sizes": "192x192" - }, - { - "src": "./img/global/app-icon-512.png", - "sizes": "512x512" - } - ] -} - diff --git a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/robots.txt b/packages/my-extended-retail-app/pwa-kit-overrides/app/static/robots.txt deleted file mode 100644 index 6f27bb66a3..0000000000 --- a/packages/my-extended-retail-app/pwa-kit-overrides/app/static/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: \ No newline at end of file diff --git a/packages/pwa-kit-create-app/CHANGELOG.md b/packages/pwa-kit-create-app/CHANGELOG.md index 0934a8d648..4bd374d92d 100644 --- a/packages/pwa-kit-create-app/CHANGELOG.md +++ b/packages/pwa-kit-create-app/CHANGELOG.md @@ -1,22 +1,31 @@ +## v2.7.1 (May 11, 2023) + +- Moved the MRT reference app to the SDKs, so that we can verify eg. Node support [#966](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/966) + ## v2.5.0 (Jan 5, 2023) -- Add instanceType to Einstein activity body [#858](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/858) -- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) + +- Add instanceType to Einstein activity body [#858](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/858) +- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) ## v2.4.0 (Dec 01, 2022) -- Update instanceUrl on retail-react-app-demo preset [#799](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/799) -- Update usages of zzrf-001 ODS instance to the new short URL format [#816](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/816) + +- Update instanceUrl on retail-react-app-demo preset [#799](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/799) +- Update usages of zzrf-001 ODS instance to the new short URL format [#816](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/816) ## v2.3.0 (Oct 27, 2022) -- Fix generated projects missing required fields in the `manifest.json` file. [#729](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/729) -- Update ODS instance URL for the `retail-react-app-demo` preset. [#799](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/799) + +- Fix generated projects missing required fields in the `manifest.json` file. [#729](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/729) +- Update ODS instance URL for the `retail-react-app-demo` preset. [#799](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/799) ## v2.2.0 (Aug 25, 2022) ## v2.1.0 (Jul 05, 2022) -- Throw error if the output directory exists [#627](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/627) + +- Throw error if the output directory exists [#627](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/627) ## v2.0.0 (May 16, 2022) -- Pin versions of pwa-kit-* packages [#577](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/577) + +- Pin versions of pwa-kit-\* packages [#577](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/577) - Add typescript-minimal and typescript-minimal-test-project presets [#574](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/574) - Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) - Fix generator log [#571](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/571) @@ -26,6 +35,7 @@ - Environment Specific Configuration Support [#477](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/447) ## v1.5.0 (Mar 17, 2022) + - Node warnings with more readable Node versions [#410](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/410) - Fix project generation on Windows when using WSL [#385](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/385) - Show warning when using incompatible node version [#384](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/384) diff --git a/packages/pwa-kit-create-app/README.md b/packages/pwa-kit-create-app/README.md index 20085236de..16b7e10773 100644 --- a/packages/pwa-kit-create-app/README.md +++ b/packages/pwa-kit-create-app/README.md @@ -4,7 +4,7 @@ A tool for generating PWA Kit projects based on project templates, such as the [ ## Requirements -- Node 16 or later +- Node 16.11 or later - npm 8 or later ## Quick Start diff --git a/packages/pwa-kit-create-app/package-lock.json b/packages/pwa-kit-create-app/package-lock.json index d46552d222..078e324d76 100644 --- a/packages/pwa-kit-create-app/package-lock.json +++ b/packages/pwa-kit-create-app/package-lock.json @@ -1,12 +1,12 @@ { "name": "pwa-kit-create-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pwa-kit-create-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "See license in LICENSE", "dependencies": { "commander": "^9.5.0", @@ -24,8 +24,8 @@ "verdaccio": "^5.22.1" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } }, "node_modules/@babel/runtime": { @@ -1351,9 +1351,9 @@ "dev": true }, "node_modules/fast-redact": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", "dev": true, "engines": { "node": ">=6" @@ -1486,13 +1486,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1618,6 +1619,18 @@ "node": ">=8" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1784,9 +1797,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dependencies": { "has": "^1.0.3" }, @@ -2720,9 +2733,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3022,9 +3035,9 @@ } }, "node_modules/tar": { - "version": "6.1.14", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.14.tgz", - "integrity": "sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -3364,6 +3377,33 @@ "node": ">=12" } }, + "node_modules/verdaccio/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/verdaccio/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -4413,9 +4453,9 @@ "dev": true }, "fast-redact": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", "dev": true }, "fast-safe-stringify": { @@ -4522,13 +4562,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -4622,6 +4663,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -4742,9 +4789,9 @@ "dev": true }, "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "requires": { "has": "^1.0.3" } @@ -5482,9 +5529,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "requires": { "lru-cache": "^6.0.0" } @@ -5711,9 +5758,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tar": { - "version": "6.1.14", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.14.tgz", - "integrity": "sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -5930,6 +5977,26 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true + }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } } } }, diff --git a/packages/pwa-kit-create-app/package.json b/packages/pwa-kit-create-app/package.json index 9ed3202580..95bd053e57 100644 --- a/packages/pwa-kit-create-app/package.json +++ b/packages/pwa-kit-create-app/package.json @@ -1,6 +1,6 @@ { "name": "pwa-kit-create-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "description": "Salesforce's project generator tool", "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-create-app#readme", "bugs": { @@ -35,12 +35,12 @@ "tar": "^6.1.13" }, "devDependencies": { - "internal-lib-build": "2.8.0-dev", - "pwa-kit-dev": "2.8.0-dev", + "internal-lib-build": "3.0.0-dev", + "pwa-kit-dev": "3.0.0-dev", "verdaccio": "^5.22.1" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } } diff --git a/packages/pwa-kit-dev/CHANGELOG.md b/packages/pwa-kit-dev/CHANGELOG.md index ad25c84c49..441f31edf7 100644 --- a/packages/pwa-kit-dev/CHANGELOG.md +++ b/packages/pwa-kit-dev/CHANGELOG.md @@ -1,23 +1,41 @@ -## v2.8.0-dev (Mar 03, 2023) +## v3.0.0-dev (May 12, 2023) + +- Update engines to drop npm 7, and requires Node to start from version 16.11 [#1166](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1166) + +## v2.7.1 (May 11, 2023) + +- Fix static file serving [#1196](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1196) +- Add suffix to SSR build files [#1157](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1157) +- Mitigate local dev memory leaks [#1155](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1155) +- Minor performance improvements [#974](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/974) +- Fix getConfig referencing config from incorrect location [#1049](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1049) +- Moved the MRT reference app to the SDKs, so that we can verify eg. Node support [#966](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/966) + ## v2.7.0 (Mar 03, 2023) -- Add explicit `ws` dependency [#865](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/865) + +- Add explicit `ws` dependency [#865](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/865) ## v2.6.0 (Jan 25, 2023) -- Upgrade prettier to v2 [#926](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/926) -- Security package updates + +- Upgrade prettier to v2 [#926](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/926) +- Security package updates ## v2.5.0 (Jan 05, 2023) -- Logging cid from res header isntead of req in local development [#821](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/821) + +- Logging cid from res header instead of req in local development [#821](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/821) ## v2.4.0 (Dec 01, 2022) + - Add `tail-logs` command [#789](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/789) - Upgrade minimatch [#793](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/793) ## v2.3.0 (Oct 27, 2022) + - Minimize "Module not found" error during webpack rebuild, whenever a package dependency is being updated/built [#722](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/722) - Update minimatch [#793](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/793) ## v2.2.0 (Aug 25, 2022) + - Added option to specify where/from the credentials can be saved/read [#647](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/647) ## v2.1.0 (Jul 05, 2022) diff --git a/packages/pwa-kit-dev/README.md b/packages/pwa-kit-dev/README.md index 5708af454b..a06ea7f80e 100644 --- a/packages/pwa-kit-dev/README.md +++ b/packages/pwa-kit-dev/README.md @@ -4,7 +4,7 @@ A command-line tool to develop, build, and deploy PWA Kit projects. ## Requirements -- Node 16 or later +- Node 16.11 or later - npm 8 or later To see all the available commands, run: diff --git a/packages/pwa-kit-dev/bin/pwa-kit-dev.js b/packages/pwa-kit-dev/bin/pwa-kit-dev.js index 45efb41d7f..21afc8a500 100755 --- a/packages/pwa-kit-dev/bin/pwa-kit-dev.js +++ b/packages/pwa-kit-dev/bin/pwa-kit-dev.js @@ -183,8 +183,8 @@ const main = async () => { const overrideSSRpath = p.join( process.cwd(), typeof projectPkg?.ccExtensibility?.overridesDir === 'string' && - !projectPkg?.ccExtensibility?.overridesDir?.startsWith('/') - ? '/' + projectPkg?.ccExtensibility?.overridesDir + !projectPkg?.ccExtensibility?.overridesDir?.startsWith(p.sep) + ? p.sep + projectPkg?.ccExtensibility?.overridesDir : projectPkg?.ccExtensibility?.overridesDir ?? '', 'app', 'ssr.js' diff --git a/packages/pwa-kit-dev/package.json b/packages/pwa-kit-dev/package.json index c60cdbe0b8..6ac278eb46 100644 --- a/packages/pwa-kit-dev/package.json +++ b/packages/pwa-kit-dev/package.json @@ -1,6 +1,6 @@ { "name": "pwa-kit-dev", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "description": "Build tools for pwa-kit", "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-dev#readme", "bugs": { @@ -91,7 +91,7 @@ "node-fetch": "^2.6.9", "open": "^8.4.2", "prettier": "^2.8.6", - "pwa-kit-runtime": "2.8.0-dev", + "pwa-kit-runtime": "^3.0.0-dev", "react-refresh": "^0.14.0", "replace-in-file": "^6.3.5", "require-from-string": "^2.0.2", @@ -123,6 +123,9 @@ "supertest": "^4.0.2", "typescript": "4.8.3" }, + "overrides": { + "nwsapi": "2.2.2" + }, "peerDependencies": { "@loadable/component": "^5.15.0", "typescript": ">=4.8.3" @@ -136,8 +139,8 @@ } }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "publishConfig": { "directory": "dist" diff --git a/packages/pwa-kit-dev/src/configs/webpack/config.js b/packages/pwa-kit-dev/src/configs/webpack/config.js index 60288bb72c..bb4b3f844d 100644 --- a/packages/pwa-kit-dev/src/configs/webpack/config.js +++ b/packages/pwa-kit-dev/src/configs/webpack/config.js @@ -44,10 +44,13 @@ if ([production, development].indexOf(mode) < 0) { // for API convenience, add the leading slash if missing export const EXT_OVERRIDES_DIR = typeof pkg?.ccExtensibility?.overridesDir === 'string' && - !pkg?.ccExtensibility?.overridesDir?.startsWith('/') - ? '/' + pkg?.ccExtensibility?.overridesDir + !pkg?.ccExtensibility?.overridesDir?.startsWith(path.sep) + ? path.sep + pkg?.ccExtensibility?.overridesDir : pkg?.ccExtensibility?.overridesDir ?? '' -export const EXT_OVERRIDES_DIR_NO_SLASH = EXT_OVERRIDES_DIR?.replace(/^\//, '') +export const EXT_OVERRIDES_DIR_NO_SLASH = EXT_OVERRIDES_DIR?.replace( + makeRegExp(`^\${path.sep}`), + '' +) export const EXT_EXTENDS = pkg?.ccExtensibility?.extends export const EXT_EXTENDABLE = pkg?.ccExtensibility?.extendable @@ -204,7 +207,7 @@ const baseConfig = (target) => { ...[EXT_EXTENDS].map((extendTarget) => ({ [extendTarget]: path.resolve( projectDir, - `node_modules/${extendTarget}` + `node_modules${path.sep}${extendTarget}` ) })) ) @@ -454,6 +457,11 @@ const renderer = plugins: [ ...config.plugins, + // This must only appear on one config – this one is the only mandatory one. + new CopyPlugin({ + patterns: [{from: 'app/static/', to: 'static/'}] + }), + // Keep this on the slowest-to-build item - the server-side bundle. new WebpackNotifierPlugin({ title: `PWA Kit Project: ${pkg.name}`, diff --git a/packages/pwa-kit-react-sdk/CHANGELOG.md b/packages/pwa-kit-react-sdk/CHANGELOG.md index 186ab005ec..93f9b992fa 100644 --- a/packages/pwa-kit-react-sdk/CHANGELOG.md +++ b/packages/pwa-kit-react-sdk/CHANGELOG.md @@ -1,19 +1,29 @@ -## v2.8.0-dev (Mar 03, 2023) -- Remove usage of `device-context` due to deprecation of user agent string. [#1168](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1168) +## v3.0.0-dev (May 12, 2023) + +- Remove usage of `device-context` due to deprecation of user agent string. [#1168](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1168) +- Upgrade React 18, React DOM 18, Remove Enzyme, add Testing library 14 [#1166](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1166) + +## v2.7.1 (May 11, 2023) + +- Fix `multi-value` params being lost [#1150](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1150) ## v2.7.0 (Mar 03, 2023) + ## v2.6.0 (Jan 25, 2023) ## v2.5.0 (Jan 05, 2023) -- Replace morgan stream to use console.log [#847](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/847) -- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) -- Reuse Server Correlation ID when Hydrating Error Pages [#846](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/846) + +- Replace morgan stream to use console.log [#847](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/847) +- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) +- Reuse Server Correlation ID when Hydrating Error Pages [#846](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/846) ## v2.4.0 (Dec 01, 2022) + - Fix `useServerContext` returning isServerSide=false when on server. [#782](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/782) -- Upgrade minimatch [#793](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/793)  +- Upgrade minimatch [#793](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/793) ## v2.3.0 (Oct 27, 2022) + - Support `react-query` server-side data fetching. [#724](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/724) - Add server-safe default configuration for `queryClientConfig` option. [#734](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/734) - Add `useServerContext` hook with the `res` response object and the `isServerSide` flag. [#737](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/737) @@ -24,9 +34,11 @@ ## v2.2.0 (Aug 25, 2022) ## v2.1.0 (Jul 05, 2022) + - Remove console logs from route component. [#651](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/651) ## v2.0.0 (May 16, 2022) + - Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) - Improve test coverage [#550](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/550) - Remove lodash and bluebird. [#534](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/534) @@ -37,6 +49,7 @@ - Fix upload bug with extending an options object [#419](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/419) ## v1.5.0 (Mar 17, 2022) + - Add boolean flag `enableLegacyBodyParser` to `createApp` options. [#446](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/446) - Add environment specific configuration support. [#421](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/421) - Remove unused url-parse dependency [#411](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/411) diff --git a/packages/pwa-kit-react-sdk/README.md b/packages/pwa-kit-react-sdk/README.md index d620f5fe24..2295adc74a 100644 --- a/packages/pwa-kit-react-sdk/README.md +++ b/packages/pwa-kit-react-sdk/README.md @@ -6,7 +6,7 @@ A library of components and utilities that supports the rendering pipeline for t ## Requirements -- Node 16 or later +- Node 16.11 or later - npm 8 or later ## Install Dependencies diff --git a/packages/pwa-kit-react-sdk/jest.config.js b/packages/pwa-kit-react-sdk/jest.config.js index 1ba99e26b9..9a8169c746 100644 --- a/packages/pwa-kit-react-sdk/jest.config.js +++ b/packages/pwa-kit-react-sdk/jest.config.js @@ -6,11 +6,10 @@ */ /* eslint-disable @typescript-eslint/no-var-requires */ const base = require('internal-lib-build/configs/jest/jest.config') -const path = require('path') module.exports = { ...base, - setupFiles: base.setupFiles.concat(path.join(__dirname, 'setup-jest.js')), + setupFilesAfterEnv: ['./setup-jest.js'], collectCoverageFrom: [ 'src/**/*.{js,jsx}', 'scripts/**/*.{js,jsx}', diff --git a/packages/pwa-kit-react-sdk/package-lock.json b/packages/pwa-kit-react-sdk/package-lock.json index bdfec8be7d..88e6ffc794 100644 --- a/packages/pwa-kit-react-sdk/package-lock.json +++ b/packages/pwa-kit-react-sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "pwa-kit-react-sdk", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pwa-kit-react-sdk", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@loadable/babel-plugin": "^5.15.3", @@ -24,12 +24,13 @@ }, "devDependencies": { "@loadable/component": "^5.15.3", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", - "enzyme": "^3.11.0", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", "node-html-parser": "^3.3.6", "nodemon": "^2.0.22", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "5.2.1", "react-router-dom": "^5.3.4", "regenerator-runtime": "^0.13.11", @@ -37,17 +38,23 @@ "supertest": "^4.0.2" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "peerDependencies": { "@loadable/component": "^5.15.0", - "react": ">=16.14 || <18", - "react-dom": ">=16.14 || <18", + "react": "^18", + "react-dom": "^18", "react-helmet": "6", "react-router-dom": "^5.1.2" } }, + "node_modules/@adobe/css-tools": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", + "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", + "dev": true + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -65,7 +72,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "peer": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -74,9 +80,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "peer": true, "engines": { "node": ">=6.9.0" @@ -113,9 +119,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "peer": true, "dependencies": { "@babel/types": "^7.21.5", @@ -256,7 +262,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -288,7 +293,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -299,9 +303,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "peer": true, "bin": { "parser": "bin/babel-parser.js" @@ -333,14 +337,14 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "peer": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -381,6 +385,117 @@ "node": ">=6.9.0" } }, + "node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "@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": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -520,6 +635,12 @@ "webpack": ">=4.6.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -556,20 +677,20 @@ "dev": true }, "node_modules/@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dependencies": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -590,10 +711,225 @@ } } }, + "node_modules/@testing-library/dom": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", + "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", + "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "dev": true + }, "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", "peer": true, "dependencies": { "@types/estree": "*", @@ -616,6 +952,72 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "peer": true }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", + "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -623,203 +1025,218 @@ "peer": true }, "node_modules/@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==", - "peer": true + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "devOptional": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, - "node_modules/@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz", - "integrity": "sha512-zeUGfQRziXW7R7skzNuJyi01ZwuKCH8WiBNnTgUJwdS/CURrJwAhWsfW7nG7E30ak8Pu3ZwD9PlK9skBfAoOBw==", - "dev": true, - "dependencies": { - "@wojtekmaj/enzyme-adapter-utils": "^0.2.0", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.0.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/enzyme-adapter-react-17?sponsor=1" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^17.0.0-0", - "react-dom": "^17.0.0-0" - } - }, - "node_modules/@wojtekmaj/enzyme-adapter-react-17/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==", - "dev": true - }, - "node_modules/@wojtekmaj/enzyme-adapter-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.2.0.tgz", - "integrity": "sha512-ZvZm9kZxZEKAbw+M1/Q3iDuqQndVoN8uLnxZ8bzxm7KgGTBejrGRoJAp8f1EN8eoO3iAjBNEQnTDW/H4Ekb0FQ==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/enzyme-adapter-utils?sponsor=1" - }, - "peerDependencies": { - "react": "^17.0.0-0" - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -851,9 +1268,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peer": true, "peerDependencies": { "acorn": "^8" @@ -885,18 +1302,18 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -917,6 +1334,15 @@ "node": ">= 8" } }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -962,43 +1388,6 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.2.tgz", - "integrity": "sha512-us+UrmGOilqttSOgoWZTpOvHu68vZT2YCjc/H4vhu56vzZpaDFBhB+Se2UwqWzMKbDv7Myq5M5pcZLAtUvTQdQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1059,6 +1448,14 @@ "node": ">=0.10.0" } }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1162,6 +1559,14 @@ "node": ">=0.10.0" } }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1176,9 +1581,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "funding": [ { "type": "opencollective", @@ -1199,7 +1604,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1209,44 +1613,6 @@ "node": ">=4" } }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1283,6 +1649,21 @@ "node": ">=6.0" } }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1365,6 +1746,14 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -1389,7 +1778,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -1397,8 +1785,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1415,7 +1802,8 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "node_modules/component-emitter": { "version": "1.3.0", @@ -1493,15 +1881,15 @@ } }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "funding": { @@ -1520,6 +1908,18 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "devOptional": true + }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -1554,6 +1954,35 @@ "node": ">=0.10" } }, + "node_modules/deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deepmerge": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", @@ -1607,21 +2036,30 @@ "node": ">=0.3.1" } }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" @@ -1640,12 +2078,12 @@ ] }, "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { - "domelementtype": "^2.3.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -1660,23 +2098,23 @@ "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==" }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==", + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==", "peer": true }, "node_modules/emojis-list": { @@ -1688,9 +2126,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz", + "integrity": "sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -1701,163 +2139,40 @@ } }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "engines": { - "node": ">=0.12" - }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "dependencies": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/enzyme-shallow-equal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", - "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", - "dev": true, - "dependencies": { - "has": "^1.0.3", - "object-is": "^1.1.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "node_modules/es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", "peer": true }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es5-ext": { "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", @@ -2067,6 +2382,22 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -2211,24 +2542,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "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==", - "dev": true, - "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/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -2248,35 +2561,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -2312,21 +2610,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -2342,8 +2625,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "peer": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has": { "version": "1.0.3", @@ -2368,6 +2650,14 @@ "node": ">=0.10.0" } }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -2449,6 +2739,14 @@ "node": ">=0.10.0" } }, + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", @@ -2461,6 +2759,28 @@ "node": ">=0.10.0" } }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -2502,36 +2822,85 @@ "react-is": "^16.7.0" } }, - "node_modules/html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dependencies": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" } }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], + ] + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/ignore-by-default": { @@ -2551,6 +2920,15 @@ "node": ">=0.10.0" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -2589,6 +2967,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -2744,27 +3138,22 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { + "node_modules/is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-number-object": { @@ -2782,17 +3171,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -2812,6 +3190,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2828,6 +3214,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -2855,12 +3250,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true - }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", @@ -2895,13 +3284,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2916,9 +3315,9 @@ } }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isexe": { @@ -2927,56 +3326,516 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "peer": true, + "node_modules/isobject/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/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==", - "peer": true, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/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==", - "peer": true, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" - }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-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==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "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", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3070,30 +3929,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3114,6 +3955,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3174,72 +4024,16 @@ } }, "node_modules/micromatch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", - "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.2.2", - "define-property": "^1.0.0", - "extend-shallow": "^2.0.1", - "extglob": "^2.0.2", - "fragment-cache": "^0.2.1", - "kind-of": "^5.0.2", - "nanomatch": "^1.2.1", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/mime": { @@ -3273,6 +4067,15 @@ "node": ">= 0.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3321,12 +4124,6 @@ "node": ">=0.10.0" } }, - "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3388,34 +4185,20 @@ "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/nanomatch/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/neo-async": { @@ -3457,12 +4240,21 @@ } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^2.0.0" + "type-detect": "4.0.8" } }, "node_modules/node-html-parser": { @@ -3475,78 +4267,10 @@ "he": "1.2.0" } }, - "node_modules/node-html-parser/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/node-html-parser/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/node-html-parser/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/node-html-parser/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/node-html-parser/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==", "peer": true }, "node_modules/nodemon": { @@ -3762,6 +4486,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -3780,37 +4512,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3822,46 +4523,12 @@ "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "node": ">=0.10.0" } }, "node_modules/pascalcase": { @@ -3889,10 +4556,10 @@ "isarray": "0.0.1" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/picocolors": { @@ -4014,103 +4681,6 @@ "isobject": "^2.1.0" } }, - "node_modules/posthtml-parser/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/posthtml-parser/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/posthtml-parser/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/posthtml-parser/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/posthtml-parser/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/posthtml-parser/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/posthtml-parser/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/posthtml-parser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/posthtml-parser/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posthtml-parser/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/posthtml-rename-id": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", @@ -4138,6 +4708,38 @@ "posthtml-render": "^1.0.6" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -4170,9 +4772,9 @@ } }, "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -4196,34 +4798,6 @@ "node": ">=0.10.0" } }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4233,29 +4807,27 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "devOptional": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-fast-compare": { @@ -4334,19 +4906,6 @@ "react": ">=15" } }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-ssr-prepass": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz", @@ -4355,27 +4914,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-test-renderer/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==", - "dev": true - }, "node_modules/react-uid": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.2.tgz", @@ -4435,6 +4973,19 @@ "node": ">=8.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -4528,16 +5079,6 @@ "node": ">=0.12" } }, - "node_modules/rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "dependencies": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4565,28 +5106,13 @@ "ret": "~0.1.10" } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "devOptional": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { @@ -4736,6 +5262,15 @@ "node": ">=8" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4767,6 +5302,14 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", @@ -4950,6 +5493,27 @@ "node": ">=0.10.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -5030,6 +5594,18 @@ "node": ">=0.10.0" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -5051,60 +5627,35 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" + "min-indent": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/superagent": { @@ -5192,6 +5743,105 @@ "svg-baker": "^1.7.0" } }, + "node_modules/svg-baker/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/svg-sprite-loader": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.11.tgz", @@ -5220,9 +5870,9 @@ } }, "node_modules/terser": { - "version": "5.17.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.2.tgz", - "integrity": "sha512-1D1aGbOF1Mnayq5PvfMc0amAR1y5Z1nrZaGCvI5xsdEfZEVte8okonk02OiaK5fw5hG1GWuuVsakOnpZW8y25A==", + "version": "5.17.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz", + "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -5238,9 +5888,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", - "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -5340,15 +5990,6 @@ "node": ">=8.0" } }, - "node_modules/to-regex-range/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/to-regex/node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -5384,6 +6025,14 @@ "node": ">=0.10.0" } }, + "node_modules/to-regex/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -5405,9 +6054,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, "node_modules/type": { "version": "1.2.0", @@ -5423,35 +6072,6 @@ "node": ">=4" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "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/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -5529,6 +6149,14 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -5623,9 +6251,9 @@ } }, "node_modules/webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", + "version": "5.83.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.83.1.tgz", + "integrity": "sha512-TNsG9jDScbNuB+Lb/3+vYolPplCS3bbEaJf+Bj0Gw4DhP3ioAflBb1flcRt9zsWITyvOhM96wMQNRWlSX52DgA==", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -5637,7 +6265,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -5705,6 +6333,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", @@ -5733,6 +6376,12 @@ } }, "dependencies": { + "@adobe/css-tools": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", + "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -5747,15 +6396,14 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "peer": true, "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "peer": true }, "@babel/core": { @@ -5782,9 +6430,9 @@ } }, "@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "peer": true, "requires": { "@babel/types": "^7.21.5", @@ -5888,8 +6536,7 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "peer": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.21.0", @@ -5912,7 +6559,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -5920,9 +6566,9 @@ } }, "@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "peer": true }, "@babel/plugin-syntax-dynamic-import": { @@ -5942,14 +6588,14 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "peer": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" } }, "@babel/traverse": { @@ -5981,6 +6627,89 @@ "to-fast-properties": "^2.0.0" } }, + "@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -6072,6 +6801,12 @@ "make-dir": "^3.0.2" } }, + "@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -6108,23 +6843,182 @@ "dev": true }, "@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==" + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==" }, "@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "requires": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" } }, + "@testing-library/dom": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", + "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "dev": true, + "requires": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + } + }, + "@testing-library/user-event": { + "version": "14.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", + "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", + "dev": true, + "requires": {} + }, + "@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "dev": true + }, "@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", "peer": true, "requires": { "@types/estree": "*", @@ -6147,6 +7041,65 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "peer": true }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", + "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -6154,191 +7107,218 @@ "peer": true }, "@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==", - "peer": true + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "devOptional": true + }, + "@types/react": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "devOptional": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "devOptional": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "peer": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "peer": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "peer": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "peer": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "peer": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "peer": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "peer": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "peer": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, - "@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz", - "integrity": "sha512-zeUGfQRziXW7R7skzNuJyi01ZwuKCH8WiBNnTgUJwdS/CURrJwAhWsfW7nG7E30ak8Pu3ZwD9PlK9skBfAoOBw==", - "dev": true, - "requires": { - "@wojtekmaj/enzyme-adapter-utils": "^0.2.0", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.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==", - "dev": true - } - } - }, - "@wojtekmaj/enzyme-adapter-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.2.0.tgz", - "integrity": "sha512-ZvZm9kZxZEKAbw+M1/Q3iDuqQndVoN8uLnxZ8bzxm7KgGTBejrGRoJAp8f1EN8eoO3iAjBNEQnTDW/H4Ekb0FQ==", - "dev": true, - "requires": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - } - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -6364,9 +7344,9 @@ "peer": true }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peer": true, "requires": {} }, @@ -6390,15 +7370,15 @@ "requires": {} }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -6413,6 +7393,15 @@ "picomatch": "^2.0.4" } }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -6429,45 +7418,20 @@ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" - }, - "array.prototype.filter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.2.tgz", - "integrity": "sha512-us+UrmGOilqttSOgoWZTpOvHu68vZT2YCjc/H4vhu56vzZpaDFBhB+Se2UwqWzMKbDv7Myq5M5pcZLAtUvTQdQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "is-array-buffer": "^3.0.1" } }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -6508,6 +7472,13 @@ "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "big.js": { @@ -6583,6 +7554,13 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "call-bind": { @@ -6596,51 +7574,21 @@ } }, "caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "peer": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -6663,6 +7611,12 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "peer": true }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -6727,6 +7681,11 @@ "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" } } }, @@ -6748,7 +7707,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, "requires": { "color-name": "1.1.3" } @@ -6756,8 +7714,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "combined-stream": { "version": "1.0.8", @@ -6771,7 +7728,8 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "component-emitter": { "version": "1.3.0", @@ -6835,15 +7793,15 @@ } }, "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, @@ -6853,6 +7811,18 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "devOptional": true + }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -6876,6 +7846,32 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, + "deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, "deepmerge": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", @@ -6911,21 +7907,27 @@ "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, + "dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, "domelementtype": { @@ -6935,12 +7937,12 @@ "dev": true }, "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { - "domelementtype": "^2.3.0" + "domelementtype": "^2.2.0" } }, "domready": { @@ -6949,20 +7951,20 @@ "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==" }, "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==", + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==", "peer": true }, "emojis-list": { @@ -6971,9 +7973,9 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz", + "integrity": "sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==", "peer": true, "requires": { "graceful-fs": "^4.2.4", @@ -6981,136 +7983,34 @@ } }, "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, - "enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "requires": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - } - }, - "enzyme-shallow-equal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", - "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", - "dev": true, - "requires": { - "has": "^1.0.3", - "object-is": "^1.1.5" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", "peer": true }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "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==", - "dev": true, - "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", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", @@ -7282,6 +8182,19 @@ } } }, + "expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, "ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -7399,18 +8312,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -7424,26 +8325,17 @@ "peer": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, - "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==", - "dev": true, - "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", @@ -7470,15 +8362,6 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "peer": true }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -7491,8 +8374,7 @@ "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "peer": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "has": { "version": "1.0.3", @@ -7509,6 +8391,13 @@ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + } } }, "has-bigints": { @@ -7560,6 +8449,13 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "has-values": { @@ -7571,6 +8467,24 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -7608,26 +8522,77 @@ "react-is": "^16.7.0" } }, - "html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "requires": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - } - }, "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "ignore-by-default": { @@ -7641,6 +8606,12 @@ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==" }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -7672,6 +8643,16 @@ } } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -7783,29 +8764,17 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { + "is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.7", @@ -7827,6 +8796,13 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "is-regex": { @@ -7839,6 +8815,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -7857,12 +8839,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true - }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", @@ -7885,13 +8861,20 @@ "has-tostringtag": "^1.0.0" } }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, "is-windows": { @@ -7900,9 +8883,9 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "isexe": { @@ -7911,9 +8894,359 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + } + } + }, + "jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "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==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "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" + } + } + } + }, + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true + }, + "jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "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==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "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" + } + } + } + }, + "jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "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==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "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" + } + } + } + }, + "jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, "jest-worker": { "version": "27.5.1", @@ -8019,30 +9352,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8060,6 +9375,12 @@ "yallist": "^3.0.2" } }, + "lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -8102,62 +9423,13 @@ "dev": true }, "micromatch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", - "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.2.2", - "define-property": "^1.0.0", - "extend-shallow": "^2.0.1", - "extglob": "^2.0.2", - "fragment-cache": "^0.2.1", - "kind-of": "^5.0.2", - "nanomatch": "^1.2.1", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -8179,6 +9451,12 @@ "mime-db": "1.52.0" } }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8217,12 +9495,6 @@ } } }, - "moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -8272,6 +9544,11 @@ "is-plain-object": "^2.0.4" } }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8279,18 +9556,6 @@ } } }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - } - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -8330,12 +9595,23 @@ } }, "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.0" + }, + "dependencies": { + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + } } } } @@ -8348,64 +9624,12 @@ "requires": { "css-select": "^4.1.3", "he": "1.2.0" - }, - "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==", "peer": true }, "nodemon": { @@ -8561,6 +9785,13 @@ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "requires": { "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "object.assign": { @@ -8575,64 +9806,19 @@ "object-keys": "^1.1.1" } }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "requires": { "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "pascalcase": { @@ -8652,14 +9838,16 @@ "dev": true, "requires": { "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + } } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8707,136 +9895,50 @@ "dependencies": { "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-prefix-selector": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz", - "integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==", - "requires": {} - }, - "posthtml": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", - "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", - "requires": { - "posthtml-parser": "^0.2.0", - "posthtml-render": "^1.0.5" - } - }, - "posthtml-parser": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", - "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", - "requires": { - "htmlparser2": "^3.8.3", - "isobject": "^2.1.0" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "requires": { - "isarray": "1.0.0" + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } } }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "has-flag": "^1.0.0" } } } }, + "postcss-prefix-selector": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz", + "integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==", + "requires": {} + }, + "posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "requires": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + } + }, + "posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "requires": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, "posthtml-rename-id": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", @@ -8861,6 +9963,31 @@ "posthtml-render": "^1.0.6" } }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "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==", + "dev": true + } + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -8890,9 +10017,9 @@ "peer": true }, "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -8907,31 +10034,6 @@ "strict-uri-encode": "^1.0.0" } }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8941,23 +10043,21 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "devOptional": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-fast-compare": { @@ -9026,42 +10126,12 @@ "tiny-warning": "^1.0.0" } }, - "react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - } - }, "react-ssr-prepass": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz", "integrity": "sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==", "requires": {} }, - "react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "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==", - "dev": true - } - } - }, "react-uid": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.2.tgz", @@ -9108,6 +10178,16 @@ "picomatch": "^2.2.1" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -9178,16 +10258,6 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9201,25 +10271,13 @@ "ret": "~0.1.10" } }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "devOptional": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "schema-utils": { @@ -9335,6 +10393,12 @@ } } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -9427,6 +10491,13 @@ "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + } } }, "snapdragon-util": { @@ -9514,6 +10585,23 @@ } } }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9579,6 +10667,15 @@ } } }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -9599,45 +10696,28 @@ } } }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + } + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" } }, "superagent": { @@ -9705,6 +10785,88 @@ "posthtml-svg-mode": "^1.0.3", "query-string": "^4.3.2", "traverse": "^0.6.6" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "svg-baker-runtime": { @@ -9739,9 +10901,9 @@ "peer": true }, "terser": { - "version": "5.17.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.2.tgz", - "integrity": "sha512-1D1aGbOF1Mnayq5PvfMc0amAR1y5Z1nrZaGCvI5xsdEfZEVte8okonk02OiaK5fw5hG1GWuuVsakOnpZW8y25A==", + "version": "5.17.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz", + "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==", "peer": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -9751,9 +10913,9 @@ } }, "terser-webpack-plugin": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", - "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", @@ -9835,6 +10997,11 @@ "requires": { "is-plain-object": "^2.0.4" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" } } }, @@ -9845,14 +11012,6 @@ "dev": true, "requires": { "is-number": "^7.0.0" - }, - "dependencies": { - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - } } }, "touch": { @@ -9870,9 +11029,9 @@ "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" }, "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, "type": { "version": "1.2.0", @@ -9885,29 +11044,6 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -9968,6 +11104,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" } } }, @@ -10036,9 +11177,9 @@ } }, "webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", + "version": "5.83.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.83.1.tgz", + "integrity": "sha512-TNsG9jDScbNuB+Lb/3+vYolPplCS3bbEaJf+Bj0Gw4DhP3ioAflBb1flcRt9zsWITyvOhM96wMQNRWlSX52DgA==", "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -10050,7 +11191,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.14.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -10094,6 +11235,18 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", diff --git a/packages/pwa-kit-react-sdk/package.json b/packages/pwa-kit-react-sdk/package.json index 31c8a32436..423476b9ab 100644 --- a/packages/pwa-kit-react-sdk/package.json +++ b/packages/pwa-kit-react-sdk/package.json @@ -1,6 +1,6 @@ { "name": "pwa-kit-react-sdk", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "description": "A library that supports the isomorphic React rendering pipeline for Commerce Cloud Managed Runtime apps", "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-react-sdk#readme", "bugs": { @@ -27,7 +27,7 @@ "lint:fix": "npm run lint:js -- --fix", "lint:js": "pwa-kit-dev lint \"**/*.{js,jsx}\"", "prepare": "npm run build", - "test": "internal-lib-build test", + "test": "pwa-kit-dev test", "test:inspect": "node --inspect-brk jest --runInBand", "test:watch": "npm test -- --watch", "version": "node ./scripts/version.js" @@ -41,7 +41,7 @@ "event-emitter": "^0.3.5", "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.8.1", - "pwa-kit-runtime": "2.8.0-dev", + "pwa-kit-runtime": "^3.0.0-dev", "react-ssr-prepass": "^1.5.0", "react-uid": "^2.3.2", "serialize-javascript": "^6.0.1", @@ -49,14 +49,15 @@ }, "devDependencies": { "@loadable/component": "^5.15.3", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", - "enzyme": "^3.11.0", - "internal-lib-build": "2.8.0-dev", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", + "internal-lib-build": "3.0.0-dev", "node-html-parser": "^3.3.6", "nodemon": "^2.0.22", - "pwa-kit-dev": "2.8.0-dev", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "pwa-kit-dev": "3.0.0-dev", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "5.2.1", "react-router-dom": "^5.3.4", "regenerator-runtime": "^0.13.11", @@ -65,14 +66,14 @@ }, "peerDependencies": { "@loadable/component": "^5.15.0", - "react": ">=16.14 || <18", - "react-dom": ">=16.14 || <18", + "react": "^18", + "react-dom": "^18", "react-helmet": "6", "react-router-dom": "^5.1.2" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "publishConfig": { "directory": "dist" diff --git a/packages/pwa-kit-react-sdk/setup-jest.js b/packages/pwa-kit-react-sdk/setup-jest.js index 5d608d9e08..286c353869 100644 --- a/packages/pwa-kit-react-sdk/setup-jest.js +++ b/packages/pwa-kit-react-sdk/setup-jest.js @@ -6,16 +6,8 @@ */ /* eslint-env jest */ -import Enzyme from 'enzyme' import 'regenerator-runtime/runtime' - -// DANGEROUS: this enzyme React 17 adapter is unofficial -// because the official adaptor is still in development -// see https://github.com/enzymejs/enzyme/issues/2429 -import Adapter from '@wojtekmaj/enzyme-adapter-react-17' - -Enzyme.configure({adapter: new Adapter()}) - +import '@testing-library/jest-dom' // Mock the application configuration to be used in all tests. jest.mock('pwa-kit-runtime/utils/ssr-config', () => { return { diff --git a/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx b/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx index ac650475cd..2fa6d78734 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx +++ b/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx @@ -6,7 +6,7 @@ */ /* global __webpack_require__ */ import React, {useRef} from 'react' -import ReactDOM from 'react-dom' +import {hydrateRoot} from 'react-dom/client' import {BrowserRouter as Router} from 'react-router-dom' import {ServerContext, CorrelationIdProvider} from '../universal/contexts' import App from '../universal/components/_app' @@ -34,13 +34,13 @@ export const registerServiceWorker = (url) => { }) } -export const OuterApp = ({routes, error, WrappedApp, locals}) => { +export const OuterApp = ({routes, error, WrappedApp, locals, onHydrate}) => { const AppConfig = getAppConfig() const isInitialPageRef = useRef(true) return ( - + { // If we are hydrating an error page use the server correlation id. @@ -69,7 +69,8 @@ OuterApp.propTypes = { routes: PropTypes.array.isRequired, error: PropTypes.object, WrappedApp: PropTypes.func.isRequired, - locals: PropTypes.object + locals: PropTypes.object, + onHydrate: PropTypes.func } /* istanbul ignore next */ export const start = () => { @@ -115,8 +116,14 @@ export const start = () => { return Promise.resolve() .then(() => new Promise((resolve) => loadableReady(resolve))) .then(() => { - ReactDOM.hydrate(, rootEl, () => { - window.__HYDRATING__ = false - }) + hydrateRoot( + rootEl, + { + window.__HYDRATING__ = false + }} + /> + ) }) } diff --git a/packages/pwa-kit-react-sdk/src/ssr/browser/main.test.js b/packages/pwa-kit-react-sdk/src/ssr/browser/main.test.js index 38e56676c4..a063d8217d 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/browser/main.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/browser/main.test.js @@ -6,10 +6,9 @@ */ import React from 'react' import {OuterApp} from './main' -import {mount} from 'enzyme' +import {render, screen} from '@testing-library/react' import {getRoutes, routeComponent} from '../universal/components/route-component' import * as errors from '../universal/errors' -import AppErrorBoundary from '../universal/components/app-error-boundary' import {uuidv4} from '../../utils/uuidv4.client' jest.mock('../../utils/uuidv4.client') @@ -28,8 +27,8 @@ describe('main', function () { routes: getRoutes(locals), WrappedApp: routeComponent(App, false, locals) } - const wrapper = mount() - expect(wrapper.find(App)).toHaveLength(1) + render() + expect(screen.getByText('App')).toBeInTheDocument() window.__PRELOADED_STATE__ = oldPreloadedState }) @@ -44,8 +43,8 @@ describe('main', function () { routes: getRoutes(locals), WrappedApp: routeComponent(App, false, locals) } - const wrapper = mount() - expect(wrapper.find(AppErrorBoundary)).toHaveLength(1) + render() + expect(screen.getByText('Error Status: 404')).toBeInTheDocument() window.__ERROR__ = oldWindowError }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.js b/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.js index fec94fbc00..c831542ebc 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.js +++ b/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.js @@ -72,6 +72,31 @@ const logAndFormatError = (err) => { } } +// Because multi-value params are not supported in `aws-serverless-express` create a proper +// search string using the `query` property. We pay special attention to the order the params +// as best as we can. +const getLocationSearch = (req) => { + const [_, search] = req.originalUrl.split('?') + const params = new URLSearchParams(search) + const newParams = new URLSearchParams() + const orderedKeys = [...new Set(params.keys())] + + // Maintain the original order of the parameters by iterating the + // ordered list of keys, and using the `req.query` object as the source of values. + orderedKeys.forEach((key) => { + const value = req.query[key] + const values = Array.isArray(value) ? value : [value] + + values.forEach((v) => { + newParams.append(key, v) + }) + }) + const searchString = newParams.toString() + + // Update the location objects reference. + return searchString ? `?${searchString}` : '' +} + /** * This is the main react-rendering function for SSR. It is an Express handler. * @@ -92,10 +117,10 @@ export const render = async (req, res, next) => { const routes = getRoutes(res.locals) const WrappedApp = routeComponent(App, false, res.locals) - const [pathname, search] = req.originalUrl.split('?') + const [pathname] = req.originalUrl.split('?') const location = { pathname, - search: search ? `?${search}` : '' + search: getLocationSearch(req) } // Step 1 - Find the match. diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.jsx b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.js similarity index 71% rename from packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.jsx rename to packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.js index 951e582085..60bb8dda65 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.jsx +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_app/index.test.js @@ -6,13 +6,13 @@ */ import React from 'react' -import {shallow} from 'enzyme' +import {render, screen} from '@testing-library/react' import App from './index' describe('App', () => { test('Renders correctly', () => { const body =

Hello world

- const wrapper = shallow({body}) - expect(wrapper.contains(body)).toBe(true) + render({body}) + expect(screen.getByText(/hello world/i)).toBeInTheDocument() }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.jsx b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.jsx index 21380cd36d..2892768148 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.jsx +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.jsx @@ -53,9 +53,13 @@ const Document = (props) => { {head.map((child) => child)} - {afterBodyStart.map((child) => child)} + {afterBodyStart.map((child, i) => ( + {child} + ))}
- {beforeBodyEnd.map((child) => child)} + {beforeBodyEnd.map((child, i) => ( + {child} + ))} ) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.test.js index 8d454c7e34..52cd0bcd31 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_document/index.test.js @@ -6,7 +6,8 @@ */ import React from 'react' -import {shallow} from 'enzyme' +import {render, screen} from '@testing-library/react' + import Document from './index' describe('Document', () => { @@ -17,7 +18,7 @@ describe('Document', () => { const html = '

Hello world

' const bodyAttributes = {className: 'root'} const htmlAttributes = {lang: 'en'} - const wrapper = shallow( + render( { bodyAttributes={bodyAttributes} /> ) - expect(wrapper.contains(sprite)).toBe(true) - expect(wrapper.contains(style)).toBe(true) - expect(wrapper.contains(script)).toBe(true) - expect(wrapper.html()).toContain(html) - expect(wrapper.html()).toContain('') - expect(wrapper.html()).toContain('') + const scriptTag = document.querySelector('script') + const svgTag = document.querySelector('svg') + const styleTag = document.querySelector('link') + // by default, React Testing Library append the test component into a body tag, since our component is a full DOM + // there will be two body tags in the DOM, we only want to check the second one + const bodyTag = document.querySelectorAll('body')[1] + // it looks like it returns two html collection, the first one is the React Testing library, the second one is our component we are testing + const htmlTag = document.getElementsByTagName('html')[1] + expect(svgTag).toBeInTheDocument() + expect(scriptTag).toBeInTheDocument() + expect(styleTag).toBeInTheDocument() + expect(screen.getByText(/hello world/i)).toBeInTheDocument() + expect(bodyTag).toHaveAttribute('class', 'root') + expect(htmlTag).toHaveAttribute('lang', 'en') }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_error/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_error/index.test.js index 4c5670e507..0114bf7692 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/_error/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/_error/index.test.js @@ -6,7 +6,7 @@ */ import React from 'react' -import {mount} from 'enzyme' +import {render, screen} from '@testing-library/react' import Error from './index' describe('Error Page', () => { @@ -15,16 +15,9 @@ describe('Error Page', () => { const message = 'Error message' test('Renders correctly', () => { - const wrapper = mount() - - expect(wrapper.props().message).toBe(message) - expect(wrapper.props().stack).toBe(stack) - expect(wrapper.props().status).toBe(status) - }) - - test('Ensure that status type is a number', () => { - const wrapper = mount() - - expect(typeof wrapper.props().status).toBe('number') + render() + expect(screen.getByText(message)).toBeInTheDocument() + expect(screen.getByText(stack)).toBeInTheDocument() + expect(screen.getByText(`Error Status: ${status}`)).toBeInTheDocument() }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/app-error-boundary/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/app-error-boundary/index.test.js index 15782d4b97..e195c431f0 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/app-error-boundary/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/app-error-boundary/index.test.js @@ -6,7 +6,7 @@ */ import React from 'react' -import {mount} from 'enzyme' +import {act, render, screen} from '@testing-library/react' import {AppErrorBoundaryWithoutRouter as AppErrorBoundary} from './index' import * as errors from '../../errors' import sinon from 'sinon' @@ -14,59 +14,73 @@ import sinon from 'sinon' describe('AppErrorBoundary', () => { const cases = [ { - content:

test 1

, + content: 'test 1', errorFactory: () => new errors.HTTPNotFound('Not found'), - afterErrorAssertions: (wrapper) => { - expect(wrapper.contains(

Error Status: 404

)).toBe(true) - expect(wrapper.contains(
Not found
)).toBe(true) + afterErrorAssertions: () => { + expect(screen.getByText('Error Status: 404')).toBeInTheDocument() + expect(screen.getByText('Not found')).toBeInTheDocument() }, variation: 'SDK HTTP Errors' }, { - content:

test 2

, + content: 'test 2', errorFactory: () => new Error('Some other error'), - afterErrorAssertions: (wrapper) => { - expect(wrapper.contains(

Error Status: 500

)).toBe(true) - expect(wrapper.contains(
Error: Some other error
)).toBe(true) + afterErrorAssertions: async () => { + expect(screen.getByText('Error Status: 500')).toBeInTheDocument() + expect(screen.getByText('Error: Some other error')).toBeInTheDocument() }, variation: 'Generic Javascript Errors' }, { - content:

test 3

, + content: 'test 3', errorFactory: () => 'Some string error', - afterErrorAssertions: (wrapper) => { - expect(wrapper.contains(

Error Status: 500

)).toBe(true) - expect(wrapper.contains(
Some string error
)).toBe(true) + afterErrorAssertions: () => { + expect(screen.getByText('Error Status: 500')).toBeInTheDocument() + expect(screen.getByText('Some string error')).toBeInTheDocument() }, variation: 'Error Strings' }, { - content:

test 4

, + content: 'test 4', errorFactory: () => undefined, - afterErrorAssertions: (wrapper) => { - expect(wrapper.find('Error').prop('message')).toBe('') + afterErrorAssertions: () => { + expect(screen.getByText('Error Status: 500')).toBeInTheDocument() + expect(document.querySelector('pre').innerHTML).toBe('') }, variation: 'Check for message value to be empty if undefined' } ] cases.forEach(({content, errorFactory, afterErrorAssertions, variation}) => { test(`Displays errors correctly (variation: ${variation})`, () => { - const wrapper = mount({content}) - expect(wrapper.contains(content)).toBe(true) - wrapper.instance().onGetPropsError(errorFactory()) - wrapper.update() - expect(wrapper.contains(content)).toBe(false) - afterErrorAssertions(wrapper) + const ref = React.createRef() + render( + + <>{content} + + ) + expect(screen.getByText(content)).toBeInTheDocument() + act(() => { + ref.current.onGetPropsError(errorFactory()) + }) + expect(screen.queryByText(content)).toBeNull() + afterErrorAssertions() }) test(`Watches history, when provided (variation: ${variation})`, () => { const history = {listen: sinon.stub().returns(sinon.stub())} - const wrapper = mount({content}) - expect(wrapper.contains(content)).toBe(true) - wrapper.instance().onGetPropsError(errorFactory()) - wrapper.update() - expect(wrapper.contains(content)).toBe(false) - afterErrorAssertions(wrapper) + const ref = React.createRef() + render( + + <>{content} + + ) + expect(screen.getByText(content)).toBeInTheDocument() + act(() => { + ref.current.onGetPropsError(errorFactory()) + }) + expect(screen.queryByText(content)).toBeNull() + afterErrorAssertions() + expect(history.listen.called).toBe(true) }) }) @@ -75,4 +89,12 @@ describe('AppErrorBoundary', () => { const result = AppErrorBoundary.getDerivedStateFromError(error) expect(result.error.message).toEqual(error.toString()) }) + + test(`componentWillUnmount unlistens to history`, () => { + const unlisten = jest.fn() + const history = {listen: jest.fn().mockReturnValue(unlisten)} + const wrapper = render(test) + wrapper.unmount() + expect(unlisten).toHaveBeenCalled() + }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/route-component/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/route-component/index.test.js index 1c7b11aa2c..d098235208 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/route-component/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/route-component/index.test.js @@ -6,9 +6,8 @@ */ import React from 'react' -import {mount} from 'enzyme' +import {render, screen, waitFor} from '@testing-library/react' import {getRoutes, routeComponent} from './index' - // TODO: The way mocks are set up in this file is kinda weird... /* eslint-disable @typescript-eslint/no-var-requires */ @@ -107,8 +106,8 @@ describe('The routeComponent component', () => { test('Is a higher-order component', () => { const Mock = getMockComponent() const Component = routeComponent(Mock) - const wrapper = mount() - expect(wrapper.contains(

MockComponent

)).toBe(true) + render() + expect(screen.getByText(/mockComponent/i)).toBeInTheDocument() }) test('Should call getProps on components at the right times during updates/rendering', () => { @@ -127,7 +126,7 @@ describe('The routeComponent component', () => { .then(() => { // Simulate the initial client-side mount (hydrating=true) return new Promise((resolve) => { - wrapper = mount( + wrapper = render( { .then(() => { // Simulate visiting a different URL, which should trigger shouldMount() and getProps() return new Promise((resolve) => { - wrapper.setProps({ - history: {location: {pathname: '/plp/'}}, - onGetPropsComplete: resolve - }) + wrapper.rerender( + + ) }) }) .then(() => { @@ -231,7 +232,7 @@ describe('The routeComponent component', () => { const Component = routeComponent(Mock, {}, true) return new Promise((resolve) => - mount() + render() ).then((caught) => expect(caught).toBe(error)) }) @@ -244,14 +245,18 @@ describe('The routeComponent component', () => { const Component = routeComponent(Mock) return new Promise((resolve) => - mount() + render() ).then((caught) => expect(caught).toBe(errorText)) }) - test(`Passes props returned from getProps to the wrapped component`, () => { + test(`Passes props returned from getProps to the wrapped component`, async () => { const initialProps = {foo: 'bar'} - const Mock = (props) =>
Mock {JSON.stringify(props)}
+ const Mock = (props) => ( +
+
{JSON.stringify(props)}
+
+ ) Mock.displayName = 'MockComponent' Mock.getProps = () => delay(150).then(() => initialProps) @@ -259,14 +264,24 @@ describe('The routeComponent component', () => { Mock.shouldGetProps = trueOnceThenFalse() const Component = routeComponent(Mock, {}, true) + await new Promise((resolve) => { + render( + { + resolve() + }} + /> + ) + }) - return new Promise((resolve) => { - const wrapper = mount( resolve(wrapper)} />) + await waitFor(() => { + expect(screen.getByTestId('props').innerHTML).toEqual( + JSON.stringify({ + foo: 'bar', + isLoading: false + }) + ) }) - .then((wrapper) => wrapper.update()) - .then((wrapper) => { - expect(wrapper.find('MockComponent').props()).toMatchObject(initialProps) - }) }) }) @@ -287,17 +302,17 @@ describe('getRoutes', () => { * A race condition is created when a user clicks two links for the same * component. If the getProps call for the second link resolves before the * first, we want to make sure the results of the first are ignored. In this - * test we setProps twice to trigger getProps calls and make sure only the + * test we rerender returned from first rendering twice to trigger getProps calls and make sure only the * second one updates the component. */ describe('Handles race conditions for getProps', () => { test(`unresolved calls to 'getProps' are squashed by new new calls`, async () => { - const render = jest.fn() + const renderFunc = jest.fn() // We can't inspect the render directly, so include this mock function // in the render and inspect that // eslint-disable-next-line react/prop-types - const MockComponent = ({callId}) =>

{render(callId)}

+ const MockComponent = ({callId}) =>

{renderFunc(callId)}

// Skip getProps on mount by returning false the first time MockComponent.shouldGetProps = falseOnceThenTrue() MockComponent.getProps = jest @@ -317,24 +332,24 @@ describe('Handles race conditions for getProps', () => { } await new Promise((resolve) => { resolver.push(resolve) - wrapper = mount() + wrapper = render() }) // Update the wrappers props 2 times in succession, this will cause `getProps` to be called // twice, but only the later should call `setStateAsync` causing a re-render. const p1 = new Promise((resolve) => { resolver.push(resolve) - wrapper.setProps({tick: 1}) + wrapper.rerender() }) const p2 = new Promise((resolve) => { resolver.push(resolve) - wrapper.setProps({tick: 2}) + wrapper.rerender() }) await Promise.all([p1, p2]) expect(MockComponent.getProps.mock.calls).toHaveLength(2) - expect(render).not.toHaveBeenCalledWith(1) - expect(render).toHaveBeenCalledWith(2) + expect(renderFunc).not.toHaveBeenCalledWith(1) + expect(renderFunc).toHaveBeenCalledWith(2) }) }) @@ -344,21 +359,24 @@ describe('Uses preloaded props on initial clientside page load', () => { const preloadedProps = {foo: 'bar'} const expectedPreloadedChildProps = {foo: 'bar', isLoading: false} - const Mock = (props) =>
Mock {JSON.stringify(props)}
+ const Mock = (props) =>
{JSON.stringify(props)}
Mock.displayName = 'MockComponent' const Component = routeComponent(Mock, true, {}) - const wrapped = await new Promise((resolve) => { - const wrapper = mount( + await new Promise((resolve) => { + const wrapper = render( resolve(wrapper)} /> ) }) - - expect(wrapped.find('MockComponent').props()).toMatchObject(expectedPreloadedChildProps) + await waitFor(() => { + expect(screen.getByTestId('props').innerHTML).toEqual( + JSON.stringify(expectedPreloadedChildProps) + ) + }) }) test('Does not use preloadedProps when not hydrating', async () => { @@ -366,13 +384,13 @@ describe('Uses preloaded props on initial clientside page load', () => { const preloadedProps = {foo: 'bar'} const expectedNotPreloadedChildProps = {isLoading: false} - const Mock = (props) =>
Mock {JSON.stringify(props)}
+ const Mock = (props) =>
{JSON.stringify(props)}
Mock.displayName = 'MockComponent' const Component = routeComponent(Mock, true, {}) - const wrapped = await new Promise((resolve) => { - const wrapper = mount( + await new Promise((resolve) => { + const wrapper = render( resolve(wrapper)} @@ -380,6 +398,10 @@ describe('Uses preloaded props on initial clientside page load', () => { ) }) - expect(wrapped.find('MockComponent').props()).toMatchObject(expectedNotPreloadedChildProps) + await waitFor(() => { + expect(screen.getByTestId('props').innerHTML).toEqual( + JSON.stringify(expectedNotPreloadedChildProps) + ) + }) }) }) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/throw-404/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/throw-404/index.test.js index 1502c4ea9a..4113578ab8 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/throw-404/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/throw-404/index.test.js @@ -6,14 +6,15 @@ */ import React from 'react' -import {shallow} from 'enzyme' +import {render} from '@testing-library/react' import Throw404 from './index' import * as errors from '../../errors' describe('Throw404', () => { test('Renders correctly', () => { - const wrapper = shallow() - expect(wrapper.html()).toBe('
') + render() + const content = document.querySelector('body').firstElementChild.innerHTML + expect(content).toBe('
') }) test('Throws on getProps', () => { diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-legacy-get-props/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-legacy-get-props/index.test.js index 5593d6ec73..06b179c171 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-legacy-get-props/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-legacy-get-props/index.test.js @@ -5,15 +5,15 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import {withLegacyGetProps} from './index' -import {shallow} from 'enzyme' +import {render, screen} from '@testing-library/react' import React from 'react' describe('withLegacyGetProps', function () { test('Renders correctly', () => { const Wrapped = () =>

Hello world

const Component = withLegacyGetProps(Wrapped) - const wrapper = shallow() - expect(wrapper.html()).toContain('Hello world') + render() + expect(screen.getByText(/Hello world/i)).toBeInTheDocument() }) test(`Has working getInitializers method`, () => { diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-react-query/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-react-query/index.test.js index afcd6ef30f..5a5981be11 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-react-query/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/components/with-react-query/index.test.js @@ -5,7 +5,7 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import {withReactQuery} from './index' -import {shallow} from 'enzyme' +import {render, screen} from '@testing-library/react' import React from 'react' describe('withReactQuery', function () { @@ -24,8 +24,9 @@ describe('withReactQuery', function () { test('Renders correctly', () => { const Wrapped = () =>

Hello world

const Component = withReactQuery(Wrapped) - const wrapper = shallow() - expect(wrapper.html()).toContain('Hello world') + render() + + expect(screen.getByText(/Hello world/i)).toBeInTheDocument() }) test(`Has working getInitializers method`, () => { diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/contexts/index.test.js b/packages/pwa-kit-react-sdk/src/ssr/universal/contexts/index.test.js index 99f963c53f..a169ea433a 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/contexts/index.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/universal/contexts/index.test.js @@ -6,7 +6,7 @@ */ import React from 'react' -import {mount, shallow} from 'enzyme' +import {render, screen} from '@testing-library/react' import {Router} from 'react-router-dom' import {createMemoryHistory} from 'history' @@ -14,6 +14,7 @@ import {CorrelationIdProvider} from './index' import {useCorrelationId} from '../hooks' import crypto from 'crypto' import PropTypes from 'prop-types' +import userEvent from '@testing-library/user-event' const SampleProvider = (props) => { const {correlationId, resetOnPageChange} = props return ( @@ -38,50 +39,51 @@ describe('CorrelationIdProvider', function () { const history = createMemoryHistory() const id = crypto.randomUUID() - const wrapper = shallow( + render( id}> ) - expect(wrapper.find(Component)).toHaveLength(1) + expect(screen.getByText(id)).toBeInTheDocument() }) test('renders when correlationId is passed as a function', () => { const id = crypto.randomUUID() const history = createMemoryHistory() - const wrapper = mount( + render( id}> ) - expect(wrapper.text()).toContain(id) + expect(screen.getByText(id)).toBeInTheDocument() }) test('renders when correlationId is passed as a string', () => { const id = crypto.randomUUID() const history = createMemoryHistory() - const wrapper = mount( + render( ) - expect(wrapper.text()).toContain(id) + expect(screen.getByText(id)).toBeInTheDocument() }) - test('generates a new id when changing page', () => { + test('generates a new id when changing page', async () => { + const user = userEvent.setup() const history = createMemoryHistory() const Component = () => { const {correlationId} = useCorrelationId() return (
-
{correlationId}
+
{correlationId}
@@ -89,17 +91,18 @@ describe('CorrelationIdProvider', function () { ) } - const wrapper = mount( + render( crypto.randomUUID()}> ) - const firstRenderedId = wrapper.find('.correlation-id').text() - const button = wrapper.find('.button') - button.simulate('click') - const secondRenderedId = wrapper.find('.correlation-id').text() + + const firstRenderedId = screen.getByTestId('correlation-id').innerHTML + const button = screen.getByText(/go to another page/i) + await user.click(button) + const secondRenderedId = screen.getByTestId('correlation-id').innerHTML // expecting the provider to have a different correlation id when a page navigation happens expect(firstRenderedId).not.toEqual(secondRenderedId) }) diff --git a/packages/pwa-kit-runtime/CHANGELOG.md b/packages/pwa-kit-runtime/CHANGELOG.md index 01ff6e094b..177bdf9ffe 100644 --- a/packages/pwa-kit-runtime/CHANGELOG.md +++ b/packages/pwa-kit-runtime/CHANGELOG.md @@ -1,29 +1,42 @@ -## v2.8.0-dev (Mar 03, 2023) -- Add optional parameter to override configuration folder used in `getConfig` [#1049](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1049) -- Remove usage of `detect-device-type` due to deprecation of user agent string. [#1168](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1168) +## v3.0.0-dev (May 12, 2023) + +- Remove usage of `detect-device-type` due to deprecation of user agent string. [#1168](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1168) +- Update engines to drop npm 7, and requires Node to start from version 16.11 [#1166](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1166) + +## v2.7.1 (May 11, 2023) + +- Add optional parameter to override configuration folder used in `getConfig` [#1049](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1049) +- Moved the MRT reference app to the SDKs, so that we can verify eg. Node support [#966](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/966) ## v2.7.0 (Mar 03, 2023) -- Support Node 16 [#965](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/965) + +- Support Node 16 [#965](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/965) ## v2.6.0 (Jan 25, 2023) -- Security package updates + +- Security package updates ## v2.5.0 (Jan 05, 2023) -- Logging cid from res header isntead of req in local development [#821](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/821) -- Replace morgan stream to use console.log [#847](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/847) + +- Logging cid from res header isntead of req in local development [#821](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/821) +- Replace morgan stream to use console.log [#847](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/847) ## v2.4.0 (Dec 01, 2022) + ## v2.3.0 (Oct 27, 2022) -- Performance: Skip retries when flushing CloudWatch metrics, prioritize returning a response instead. [720](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/720) -- Add Correlation ID to SCAPI requests. [#728](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/728) + +- Performance: Skip retries when flushing CloudWatch metrics, prioritize returning a response instead. [720](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/720) +- Add Correlation ID to SCAPI requests. [#728](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/728) ## v2.2.0 (Aug 25, 2022) + ## v2.1.0 (Jul 05, 2022) ## v2.0.0 (May 16, 2022) -- Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) -- Improve test coverage [#550](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/550) -- Make the createApp API idiomatic for Express, fix service-worker loading. [#536](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/536) -- Add environment specific configuration support via `getConfig`. [#447](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/447) -- Remove legacy remote proxy, which allowed remote environments to use proxy configs in package.json [#425](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/425) -- Remove default `body-parser` middleware from express server. [#444](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/444) + +- Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) +- Improve test coverage [#550](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/550) +- Make the createApp API idiomatic for Express, fix service-worker loading. [#536](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/536) +- Add environment specific configuration support via `getConfig`. [#447](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/447) +- Remove legacy remote proxy, which allowed remote environments to use proxy configs in package.json [#425](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/425) +- Remove default `body-parser` middleware from express server. [#444](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/444) diff --git a/packages/pwa-kit-runtime/package-lock.json b/packages/pwa-kit-runtime/package-lock.json index 60a7fa20b7..e467449c05 100644 --- a/packages/pwa-kit-runtime/package-lock.json +++ b/packages/pwa-kit-runtime/package-lock.json @@ -1,12 +1,12 @@ { "name": "pwa-kit-runtime", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pwa-kit-runtime", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@loadable/babel-plugin": "^5.15.3", @@ -35,11 +35,11 @@ "supertest": "^4.0.2" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "peerDependencies": { - "pwa-kit-dev": "^2.8.0-dev" + "pwa-kit-dev": "3.0.0-dev" }, "peerDependenciesMeta": { "pwa-kit-dev": { @@ -72,9 +72,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "peer": true, "engines": { "node": ">=6.9.0" @@ -120,9 +120,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "peer": true, "dependencies": { "@babel/types": "^7.21.5", @@ -313,9 +313,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "peer": true, "bin": { "parser": "bin/babel-parser.js" @@ -348,14 +348,14 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "peer": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -549,9 +549,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" }, "node_modules/@vendia/serverless-express": { "version": "3.4.0", @@ -649,9 +649,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1374.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1374.0.tgz", - "integrity": "sha512-Q7TExvBskRM23GfE1iy0GRxpUF+d9LY7ggmdHvL+2gX/QTzxSYaHHRPa8MNzFtzZLz+BDcDIgAcMjYKsrm18Rw==", + "version": "2.1383.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1383.0.tgz", + "integrity": "sha512-A8sdfcrlGYXqu5x8dpwh1lg9/o354leCx08N/irwH3U4sAwQin0vHsI9DHmaJ0PLNo/TuzeLE3s4dLpI3mWtww==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -868,9 +868,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "funding": [ { "type": "opencollective", @@ -1126,9 +1126,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==", + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==", "peer": true }, "node_modules/encodeurl": { @@ -1407,12 +1407,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1476,6 +1477,17 @@ "node": ">=4" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2008,12 +2020,21 @@ } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", "dev": true, "dependencies": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" } }, "node_modules/nise/node_modules/isarray": { @@ -2055,9 +2076,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==", "peer": true }, "node_modules/nodemon": { @@ -2417,9 +2438,9 @@ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3011,9 +3032,9 @@ } }, "@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "peer": true }, "@babel/core": { @@ -3048,9 +3069,9 @@ } }, "@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "peer": true, "requires": { "@babel/types": "^7.21.5", @@ -3192,9 +3213,9 @@ } }, "@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "peer": true }, "@babel/plugin-syntax-dynamic-import": { @@ -3215,14 +3236,14 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "peer": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" } }, "@babel/traverse": { @@ -3380,9 +3401,9 @@ "dev": true }, "@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" }, "@vendia/serverless-express": { "version": "3.4.0", @@ -3459,9 +3480,9 @@ } }, "aws-sdk": { - "version": "2.1374.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1374.0.tgz", - "integrity": "sha512-Q7TExvBskRM23GfE1iy0GRxpUF+d9LY7ggmdHvL+2gX/QTzxSYaHHRPa8MNzFtzZLz+BDcDIgAcMjYKsrm18Rw==", + "version": "2.1383.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1383.0.tgz", + "integrity": "sha512-A8sdfcrlGYXqu5x8dpwh1lg9/o354leCx08N/irwH3U4sAwQin0vHsI9DHmaJ0PLNo/TuzeLE3s4dLpI3mWtww==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -3623,9 +3644,9 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "caniuse-lite": { - "version": "1.0.30001486", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz", - "integrity": "sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "peer": true }, "chalk": { @@ -3803,9 +3824,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.387", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz", - "integrity": "sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==", + "version": "1.4.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", + "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==", "peer": true }, "encodeurl": { @@ -4024,12 +4045,13 @@ "peer": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -4075,6 +4097,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -4481,12 +4508,23 @@ } }, "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.0" + }, + "dependencies": { + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + } } }, "isarray": { @@ -4527,9 +4565,9 @@ } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz", + "integrity": "sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==", "peer": true }, "nodemon": { @@ -4785,9 +4823,9 @@ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "requires": { "lru-cache": "^6.0.0" }, diff --git a/packages/pwa-kit-runtime/package.json b/packages/pwa-kit-runtime/package.json index b1e67e8e3c..c98ca2c8c8 100644 --- a/packages/pwa-kit-runtime/package.json +++ b/packages/pwa-kit-runtime/package.json @@ -1,6 +1,6 @@ { "name": "pwa-kit-runtime", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "description": "The PWAKit Runtime", "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-runtime#readme", "bugs": { @@ -49,16 +49,16 @@ "@serverless/event-mocks": "^1.1.1", "aws-lambda-mock-context": "^3.2.1", "fs-extra": "^10.1.0", - "internal-lib-build": "2.8.0-dev", + "internal-lib-build": "3.0.0-dev", "nock": "^13.3.0", "nodemon": "^2.0.22", - "pwa-kit-dev": "2.8.0-dev", + "pwa-kit-dev": "3.0.0-dev", "sinon": "^13.0.2", "superagent": "^6.1.0", "supertest": "^4.0.2" }, "peerDependencies": { - "pwa-kit-dev": "^2.8.0-dev" + "pwa-kit-dev": "3.0.0-dev" }, "peerDependenciesMeta": { "pwa-kit-dev": { @@ -66,8 +66,8 @@ } }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "publishConfig": { "directory": "dist" diff --git a/packages/template-express-minimal/package-lock.json b/packages/template-express-minimal/package-lock.json index 82446a5656..076075bfcd 100644 --- a/packages/template-express-minimal/package-lock.json +++ b/packages/template-express-minimal/package-lock.json @@ -1,12 +1,12 @@ { "name": "template-express-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "template-express-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "See license in LICENSE", "devDependencies": { "supertest": "^4.0.2" @@ -116,13 +116,14 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -141,6 +142,18 @@ "node": ">= 0.4.0" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -229,9 +242,9 @@ "dev": true }, "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -418,13 +431,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -437,6 +451,12 @@ "function-bind": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -501,9 +521,9 @@ "dev": true }, "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "requires": { "side-channel": "^1.0.4" diff --git a/packages/template-express-minimal/package.json b/packages/template-express-minimal/package.json index 2e655614de..d1a2dfc003 100644 --- a/packages/template-express-minimal/package.json +++ b/packages/template-express-minimal/package.json @@ -1,6 +1,6 @@ { "name": "template-express-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "private": true, "license": "See license in LICENSE", "scripts": { @@ -15,8 +15,8 @@ "test": "pwa-kit-dev test" }, "devDependencies": { - "pwa-kit-dev": "2.8.0-dev", - "pwa-kit-runtime": "2.8.0-dev", + "pwa-kit-dev": "3.0.0-dev", + "pwa-kit-runtime": "3.0.0-dev", "supertest": "^4.0.2" }, "mobify": { diff --git a/packages/template-mrt-reference-app/app/ssr.js b/packages/template-mrt-reference-app/app/ssr.js index 8dd4b24021..4d536dea41 100644 --- a/packages/template-mrt-reference-app/app/ssr.js +++ b/packages/template-mrt-reference-app/app/ssr.js @@ -67,6 +67,9 @@ const ENVS_TO_EXPOSE = [ 'aws_lambda_log_stream_name', 'aws_region', 'bundle_id', + // These "customer" defined environment variables are set by the Manager + // and expected by the MRT smoke test suite + 'customer_*', 'deploy_id', 'deploy_target', 'external_domain_name', diff --git a/packages/template-mrt-reference-app/package-lock.json b/packages/template-mrt-reference-app/package-lock.json index 1f8fce2cd9..6dbf93bd0d 100644 --- a/packages/template-mrt-reference-app/package-lock.json +++ b/packages/template-mrt-reference-app/package-lock.json @@ -1,12 +1,12 @@ { "name": "template-mrt-reference-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "template-mrt-reference-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "license": "See license in LICENSE", "devDependencies": { "@loadable/component": "^5.15.0", @@ -15,8 +15,8 @@ "supertest": "^4.0.2" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } }, "node_modules/@babel/runtime": { @@ -114,12 +114,12 @@ "dev": true }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dev": true, "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "node_modules/debug": { @@ -186,13 +186,14 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -211,6 +212,18 @@ "node": ">= 0.4.0" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -313,9 +326,9 @@ "dev": true }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -348,9 +361,9 @@ "dev": true }, "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -569,12 +582,12 @@ "dev": true }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dev": true, "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "debug": { @@ -631,13 +644,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -650,6 +664,12 @@ "function-bind": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -728,9 +748,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -749,9 +769,9 @@ "dev": true }, "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "requires": { "side-channel": "^1.0.4" diff --git a/packages/template-mrt-reference-app/package.json b/packages/template-mrt-reference-app/package.json index 5e34e79274..b2ac53ed55 100644 --- a/packages/template-mrt-reference-app/package.json +++ b/packages/template-mrt-reference-app/package.json @@ -1,6 +1,6 @@ { "name": "template-mrt-reference-app", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "private": true, "license": "See license in LICENSE", "scripts": { @@ -18,13 +18,13 @@ "@loadable/component": "^5.15.0", "cross-fetch": "^3.1.4", "express-basic-auth": "^1.2.0", - "pwa-kit-dev": "2.8.0-dev", - "pwa-kit-runtime": "2.8.0-dev", + "pwa-kit-dev": "3.0.0-dev", + "pwa-kit-runtime": "3.0.0-dev", "supertest": "^4.0.2" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "mobify": { "ssrEnabled": true, diff --git a/packages/template-retail-react-app/CHANGELOG.md b/packages/template-retail-react-app/CHANGELOG.md index 5febca1f64..0206a6ab69 100644 --- a/packages/template-retail-react-app/CHANGELOG.md +++ b/packages/template-retail-react-app/CHANGELOG.md @@ -1,151 +1,173 @@ -## v2.8.0-dev (Mar 03, 2023) +## v3.0.0-dev + +- Upgrade React v18, React DOM v18, React-hook-form v7, and Chakra 2 libraries [#1166](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1166) - Add app `above-header` and product-list `above-page-header` convenience components [#1183](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1183) - Remove `cross-fetch` dependency [#1160](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1160) -- Make `mergeBasket` conditional more robust [#1048](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1048) + +## v2.7.1 (May 11, 2023) + +- Replace invalid row value with nowrap [#1179](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1179) +- Add a redirect to login page after user signs out from checkout page [#1172](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1172) +- PWA Kit should have a mechanism for replacing the access token when a SFRA login state is changed [#1171](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1171) +- Added session bridge call to login for phased launch [#1159](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1159) +- Fix Page Designer ImageWithText Link component [#1092](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1092) +- Remove site alias and locale from location.state.directedFrom path [#1065)](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1065) +- Product list refinements [#957](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/957) +- Prevent modal to open when it fails to add an item to cart [#1053](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1053) +- Make `mergeBasket` conditional more robust [#1048](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1048) +- Fix addresses not having preferred address first. [#1051](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1051) +- Changed type of the phone number field to bring up numberic keyboard on mobile devices - W-9871940 [#1016)](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1016) ## v2.7.0 (Mar 03, 2023) -- Add Page Designer ImageTile component [#967](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/967) -- Add Page Designer ImageWithText component [#991](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/991) -- Add Page Designer carousel component [#977](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/977) -- Add Page Designer layout components [#993](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/993) -- Support the product-set type [#1019](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1019) + +- Add Page Designer ImageTile component [#967](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/967) +- Add Page Designer ImageWithText component [#991](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/991) +- Add Page Designer carousel component [#977](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/977) +- Add Page Designer layout components [#993](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/993) +- Support the product-set type [#1019](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/1019) ## v2.6.0 (Jan 25, 2023) -- Mega menu fixes [#875](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/875) and [#910](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/910) -- Cache SLAS callback using request processor [#884](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/884) -- Fix padding of footer drawer component [#899](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/899) -- Update createOrder to send SLAS USID [#920](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/920) -- Fix PropTypes [#924](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/924) -- Remove unnecessary map statement [#929](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/929) + +- Mega menu fixes [#875](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/875) and [#910](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/910) +- Cache SLAS callback using request processor [#884](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/884) +- Fix padding of footer drawer component [#899](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/899) +- Update createOrder to send SLAS USID [#920](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/920) +- Fix PropTypes [#924](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/924) +- Remove unnecessary map statement [#929](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/929) ## v2.5.0 (Jan 5, 2023) -- Add instanceType to Einstein activity body [#858](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/858) -- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) -- Einstein handle variants [#867](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/867) -- Fix cc exp year [#874](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/874) + +- Add instanceType to Einstein activity body [#858](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/858) +- Do not use a proxy to call Einstein [#857](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/857) +- Einstein handle variants [#867](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/867) +- Fix cc exp year [#874](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/874) ## v2.4.0 (Dec 1, 2022) -- Dynamic footer Copyright date [#741](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/741) -- Footer copyright: remove the remaining hardcoded year [#760](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/760) -- ImageGallery uses image.link when DIS is not set [#786](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/786) -- Use default locale as target if none is specified [#788](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/788) -- Password change bug fix [#803](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/803) -- pwa-kit-dev command for tailing logs [#789](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/789) -- Update usages of zzrf-001 ODS instance to the new short URL format [#816](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/816) + +- Dynamic footer Copyright date [#741](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/741) +- Footer copyright: remove the remaining hardcoded year [#760](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/760) +- ImageGallery uses image.link when DIS is not set [#786](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/786) +- Use default locale as target if none is specified [#788](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/788) +- Password change bug fix [#803](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/803) +- pwa-kit-dev command for tailing logs [#789](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/789) +- Update usages of zzrf-001 ODS instance to the new short URL format [#816](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/816) ## v2.3.0 (Oct 27, 2022) -- Fix locale `alias` by including `locale` object inside the MultiSite Context. [#716](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/716) -- Updated translations. [#725](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/725) -- Add new Einstein API activities. [#714](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/714) -- Fix search field to recognize `“&”` character. [#736](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/736) -- Fix filters on search results page. [#742](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/742) -- Dynamic footer copyright date. [#741](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/741) -- Bugfix: image gallery thumbnails not working without DIS [#786](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/786) -- Ensure that a valid target locale is use if none is provided [#788](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/788) + +- Fix locale `alias` by including `locale` object inside the MultiSite Context. [#716](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/716) +- Updated translations. [#725](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/725) +- Add new Einstein API activities. [#714](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/714) +- Fix search field to recognize `“&”` character. [#736](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/736) +- Fix filters on search results page. [#742](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/742) +- Dynamic footer copyright date. [#741](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/741) +- Bugfix: image gallery thumbnails not working without DIS [#786](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/786) +- Ensure that a valid target locale is use if none is provided [#788](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/788) ## v2.2.0 (Aug 25, 2022) -- Update zzrf-001 url [#694](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/694) -- Optimize Server-side performance [#667](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/667) -- Remove references to session bridging [#684](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/684) + +- Update zzrf-001 url [#694](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/694) +- Optimize Server-side performance [#667](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/667) +- Remove references to session bridging [#684](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/684) ## v2.1.0 (Jul 05, 2022) -- Update translations [#643](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/643) -- Update translations [#653](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/653) -- Add bundlesize test back into CI [#652](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/652) -- Fix UI bug on notifications badge [#620](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/620) + +- Update translations [#643](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/643) +- Update translations [#653](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/653) +- Add bundlesize test back into CI [#652](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/652) +- Fix UI bug on notifications badge [#620](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/620) ## v2.0.0 (May 16, 2022) -- Update translation docs [#570](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/570) -- Fixed loading correct amount of skeletons [#576] (https://github.com/SalesforceCommerceCloud/pwa-kit/pull/576) -- Remove manifest path [#582](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/582) -- Fix Verbose ShellJS Command [#588](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/588) -- Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) -- Multi-site, Fix the case when no site aliases is set [#551](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/551) -- Fix invalid refresh token [#528](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/528) -- Add valid token check before using refresh token on login [#533](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/533) -- Fix localization scripts to output to the correct default locale [#539](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/539) -- Merge guest cart and registered cart [#540](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/540) -- Move retail react app jest setup out from pwa-kit-dev [#545](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/545) -- Remove legacy remote proxy, which allowed remote environments to use proxy configs in package.json [#425](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/425) -- Rename 'pwa' directory into 'template-retail-react-app' [#485](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/485) -- Optimize visibility-off.svg [#512](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/512) -- Support Multi-site implementation using dynamic config [#469](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/469) -- Service worker loading for dev server [#464](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/464) -- Environment Specific Configuration Support [#477](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/447) +- Update translation docs [#570](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/570) +- Fixed loading correct amount of skeletons [#576] (https://github.com/SalesforceCommerceCloud/pwa-kit/pull/576) +- Remove manifest path [#582](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/582) +- Fix Verbose ShellJS Command [#588](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/588) +- Drop node 12 support for [#589](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/589) +- Multi-site, Fix the case when no site aliases is set [#551](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/551) +- Fix invalid refresh token [#528](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/528) +- Add valid token check before using refresh token on login [#533](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/533) +- Fix localization scripts to output to the correct default locale [#539](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/539) +- Merge guest cart and registered cart [#540](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/540) +- Move retail react app jest setup out from pwa-kit-dev [#545](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/545) +- Remove legacy remote proxy, which allowed remote environments to use proxy configs in package.json [#425](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/425) +- Rename 'pwa' directory into 'template-retail-react-app' [#485](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/485) +- Optimize visibility-off.svg [#512](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/512) +- Support Multi-site implementation using dynamic config [#469](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/469) +- Service worker loading for dev server [#464](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/464) +- Environment Specific Configuration Support [#477](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/447) ## v1.5.0 (Mar 17, 2022) -- Support storing authentication tokens in cookie [#429](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/429) -- Make sure the forgot-password modal also shows up in the checkout flow [#373](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/373) -- On Windows, the locale selector dropdown in the footer now showing all of the options properly [#381](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/381) -- Import cross-fetch to make OCAPI client isomorphic [#382](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/382) -- Multi-site implementation for Retail React App [#391](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/391) +- Support storing authentication tokens in cookie [#429](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/429) +- Make sure the forgot-password modal also shows up in the checkout flow [#373](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/373) +- On Windows, the locale selector dropdown in the footer now showing all of the options properly [#381](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/381) +- Import cross-fetch to make OCAPI client isomorphic [#382](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/382) +- Multi-site implementation for Retail React App [#391](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/391) ## v1.4.0 (Jan 27, 2022) -- Do not send HSTS header during local development [#288](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/288) -- Add constants for `` tags `theme-color` and `apple-mobile-web-app-title` [#287](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/287) -- Upgrade to React 17 [#278](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/278) -- Import preliminary translations [#324](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/324) -- Remove old dependencies that are no longer used [#317](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/317) +- Do not send HSTS header during local development [#288](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/288) +- Add constants for `` tags `theme-color` and `apple-mobile-web-app-title` [#287](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/287) +- Upgrade to React 17 [#278](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/278) +- Import preliminary translations [#324](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/324) +- Remove old dependencies that are no longer used [#317](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/317) ## v1.3.0 (Jan 06, 2022) -- Remove Einstein from home page [#208](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/208) -- Add git2gus config to allow git2gus integration [210](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/210) -- Set common HTTP security headers [#263](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/263) -- Add message ids to all the translated text, so they provide context for the translators [#239](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/239) [#207](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/207) [#195](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/195) -- Minor translation fixes [260](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/260) [#252](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/252) -- Provide Url Customization for the Retail React App [#228](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/228/files) -- Add an image component to allow for easier-implementation of responsive images [#186](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/186) -- Add shop Products section with products from the Catalog [#216](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/216) -- Remove `upgrade-insecure-requests` for local development [#270](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/270) -- Fix the missing out-of-stock message on mobile screens [#231](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/231) -- Fix order summary prices on the check out page misaligned on mobile [#233](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/233) -- Skip irrelevant jobs on CI on forked PR [#237](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/237) [#240](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/240) -- Add webpack plugin [#255](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/255) -- Combine config files [#256](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/256) -- Improve unsupported locale error message [#225](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/225) -- Add github template [#226](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/226) -- Fix shipping method description overflows the price section [#232](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/232) -- Fix show applied promotion codes case sensitive issue [#224](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/224) -- Fix section subtitle incorrect prop warning [#282](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/282) +- Remove Einstein from home page [#208](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/208) +- Add git2gus config to allow git2gus integration [210](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/210) +- Set common HTTP security headers [#263](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/263) +- Add message ids to all the translated text, so they provide context for the translators [#239](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/239) [#207](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/207) [#195](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/195) +- Minor translation fixes [260](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/260) [#252](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/252) +- Provide Url Customization for the Retail React App [#228](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/228/files) +- Add an image component to allow for easier-implementation of responsive images [#186](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/186) +- Add shop Products section with products from the Catalog [#216](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/216) +- Remove `upgrade-insecure-requests` for local development [#270](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/270) +- Fix the missing out-of-stock message on mobile screens [#231](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/231) +- Fix order summary prices on the check out page misaligned on mobile [#233](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/233) +- Skip irrelevant jobs on CI on forked PR [#237](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/237) [#240](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/240) +- Add webpack plugin [#255](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/255) +- Combine config files [#256](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/256) +- Improve unsupported locale error message [#225](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/225) +- Add github template [#226](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/226) +- Fix shipping method description overflows the price section [#232](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/232) +- Fix show applied promotion codes case sensitive issue [#224](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/224) +- Fix section subtitle incorrect prop warning [#282](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/282) ## v1.2.0 (Nov 18, 2021) -- Simplify homepage for Retail React App [#201](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/201) -- Ensure `cookieId` value is sent always for Einstein recommendations [#179](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/179) -- Remove `x-powered-by` HTTP response header [#165](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/165) -- For search engine crawlers, add `hreflang` links to the current page's html [#137](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/137) -- Use the preferred currency when switching locales. [#105](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/105) -- Integrate wishlist with einstein recommended products. [#131](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/131) -- When adding a new locale, minimize configuring the locale selector UI by having a list of commonly-used locales [#175](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/175) -- Enable adding wishlist item to the cart. [#158](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/158) -- Rename CartItemVariant to ItemVariantProvider [#155](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/155) -- Enabling pseudo locale now affects only the loading of the translation messages. The rest of the app still knows about English and the other locales. [#177](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/177) -- Allow individual Commerce API calls to pass in a different locale/currency and override the global value. [#177](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/177) -- Fix regression with loading the correct translation file [#193](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/193) -- Upgrade `chakra-ui/react` to `^1.7.1` version. [#204](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/204) -- Rename the `extract-messages` and `compile-messages` commands to `extract-default-translations` and `compile-translations` [#160](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/160) -- Enable favourite icons on product tiles for guest users [#173](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/173) -- Fix Missing Locale Param for Commerce API Calls [#174](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/174) -- Add cache control header to product details page [#172](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/172) -- Clear SLAS tokens when OID is changed [#178](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/178) +- Simplify homepage for Retail React App [#201](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/201) +- Ensure `cookieId` value is sent always for Einstein recommendations [#179](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/179) +- Remove `x-powered-by` HTTP response header [#165](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/165) +- For search engine crawlers, add `hreflang` links to the current page's html [#137](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/137) +- Use the preferred currency when switching locales. [#105](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/105) +- Integrate wishlist with einstein recommended products. [#131](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/131) +- When adding a new locale, minimize configuring the locale selector UI by having a list of commonly-used locales [#175](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/175) +- Enable adding wishlist item to the cart. [#158](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/158) +- Rename CartItemVariant to ItemVariantProvider [#155](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/155) +- Enabling pseudo locale now affects only the loading of the translation messages. The rest of the app still knows about English and the other locales. [#177](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/177) +- Allow individual Commerce API calls to pass in a different locale/currency and override the global value. [#177](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/177) +- Fix regression with loading the correct translation file [#193](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/193) +- Upgrade `chakra-ui/react` to `^1.7.1` version. [#204](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/204) +- Rename the `extract-messages` and `compile-messages` commands to `extract-default-translations` and `compile-translations` [#160](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/160) +- Enable favourite icons on product tiles for guest users [#173](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/173) +- Fix Missing Locale Param for Commerce API Calls [#174](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/174) +- Add cache control header to product details page [#172](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/172) +- Clear SLAS tokens when OID is changed [#178](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/178) ## v1.1.0 (Sep 27, 2021) -- Fix wishlist bugs and provide better hooks for wishlist features. [#64](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/64) -- Lazy load Popover component. [#134](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/134) -- Fix pseudo local command to use `en-XB`. [#101](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/101) -- Ensure generated projects ship with a working .gitignore file. [#95](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/95) -- Remove eslint rule which check for Salesforce copyright. [#104](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/104) -- Improve error page design. [#74](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/74) -- Localize cart and checkout messages. [#106](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/106) -- Add default cache control header to home page. [#103](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/103) -- Security - `inquirer` package upgrade. [#121](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/121) -- New quantity picker. [#102](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/102) +- Fix wishlist bugs and provide better hooks for wishlist features. [#64](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/64) +- Lazy load Popover component. [#134](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/134) +- Fix pseudo local command to use `en-XB`. [#101](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/101) +- Ensure generated projects ship with a working .gitignore file. [#95](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/95) +- Remove eslint rule which check for Salesforce copyright. [#104](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/104) +- Improve error page design. [#74](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/74) +- Localize cart and checkout messages. [#106](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/106) +- Add default cache control header to home page. [#103](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/103) +- Security - `inquirer` package upgrade. [#121](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/121) +- New quantity picker. [#102](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/102) ## v1.0.0 (Sep 08, 2021) -- PWA Kit General Availability and open source. 🎉 +- PWA Kit General Availability and open source. 🎉 diff --git a/packages/template-retail-react-app/README.md b/packages/template-retail-react-app/README.md index d96e9080b5..9510083233 100644 --- a/packages/template-retail-react-app/README.md +++ b/packages/template-retail-react-app/README.md @@ -6,7 +6,7 @@ Developers don’t have to worry about the underlying infrastructure, whether th ## Requirements -- Node 16 or later +- Node 16.11 or later - npm 8 or later ## Get Started diff --git a/packages/template-retail-react-app/app/components/_app-config/index.jsx b/packages/template-retail-react-app/app/components/_app-config/index.jsx index edc2ee10e7..ffdeea9d59 100644 --- a/packages/template-retail-react-app/app/components/_app-config/index.jsx +++ b/packages/template-retail-react-app/app/components/_app-config/index.jsx @@ -52,6 +52,7 @@ const AppConfig = ({children, locals = {}}) => { redirectURI={`${appOrigin}/callback`} proxy={`${appOrigin}${commerceApiConfig.proxyPath}`} headers={headers} + OCAPISessionsURL={`${appOrigin}/mobify/proxy/ocapi/s/${locals.site?.id}/dw/shop/v22_8/sessions`} > {children} diff --git a/packages/template-retail-react-app/app/components/_app-config/index.test.js b/packages/template-retail-react-app/app/components/_app-config/index.test.js index 028bb79b35..3cc42a60fc 100644 --- a/packages/template-retail-react-app/app/components/_app-config/index.test.js +++ b/packages/template-retail-react-app/app/components/_app-config/index.test.js @@ -19,6 +19,7 @@ import {registerUserToken} from 'retail-react-app/app/utils/test-utils' describe('AppConfig', () => { beforeAll(() => { jest.spyOn(window.localStorage, 'setItem') + global.fetch = jest.fn().mockImplementation(() => mockConfig.mockFetchOCAPISessions) }) beforeEach(() => { @@ -43,6 +44,8 @@ describe('AppConfig', () => { afterAll(() => { window.localStorage.setItem.mockRestore() + global.fetch.mockClear() + delete global.fetch }) test('renders', async () => { diff --git a/packages/template-retail-react-app/app/components/breadcrumb/index.jsx b/packages/template-retail-react-app/app/components/breadcrumb/index.jsx index 9af532472b..d14178bf14 100644 --- a/packages/template-retail-react-app/app/components/breadcrumb/index.jsx +++ b/packages/template-retail-react-app/app/components/breadcrumb/index.jsx @@ -45,7 +45,7 @@ const Breadcrumb = ({categories, ...rest}) => { {category.name} diff --git a/packages/template-retail-react-app/app/components/confirmation-modal/index.test.js b/packages/template-retail-react-app/app/components/confirmation-modal/index.test.js index 4b5dbf9cde..d12aa89c77 100644 --- a/packages/template-retail-react-app/app/components/confirmation-modal/index.test.js +++ b/packages/template-retail-react-app/app/components/confirmation-modal/index.test.js @@ -8,7 +8,7 @@ import React from 'react' import ConfirmationModal from 'retail-react-app/app/components/confirmation-modal/index' import {Box, useDisclosure} from '@chakra-ui/react' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' -import user from '@testing-library/user-event' +import userEvent from '@testing-library/user-event' import {screen} from '@testing-library/react' import {REMOVE_CART_ITEM_CONFIRMATION_DIALOG_CONFIG} from 'retail-react-app/app/pages/cart/partials/cart-secondary-button-group' @@ -28,11 +28,13 @@ afterEach(() => { }) test('Renders confirmation modal with default config', async () => { + const user = userEvent.setup() + renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) expect(screen.getByText(/confirm action/i)).toBeInTheDocument() expect(screen.getByText(/are you sure you want to continue/i)).toBeInTheDocument() @@ -41,11 +43,13 @@ test('Renders confirmation modal with default config', async () => { }) test('Renders confirmation modal with the given config', async () => { + const user = userEvent.setup() + renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) expect(screen.getByText(/confirm remove item/i)).toBeInTheDocument() expect(screen.getByText(/are you sure you want to remove this item/i)).toBeInTheDocument() @@ -54,37 +58,41 @@ test('Renders confirmation modal with the given config', async () => { }) test('Verify confirm action button click', async () => { + const user = userEvent.setup() + const onPrimaryAction = jest.fn() renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) const onPrimaryActionTrigger = screen.getByText(/yes/i) expect(screen.getByText(/confirm action/i)).toBeInTheDocument() expect(onPrimaryActionTrigger).toBeInTheDocument() - user.click(onPrimaryActionTrigger) + await user.click(onPrimaryActionTrigger) expect(onPrimaryAction).toHaveBeenCalledTimes(1) }) test('Verify cancel action button click', async () => { + const user = userEvent.setup() + const onAlternateAction = jest.fn() renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) const onAlternateActionTrigger = screen.getByText(/no/i) expect(screen.getByText(/confirm action/i)).toBeInTheDocument() expect(onAlternateActionTrigger).toBeInTheDocument() - user.click(onAlternateActionTrigger) + await user.click(onAlternateActionTrigger) expect(onAlternateAction).toHaveBeenCalledTimes(1) }) diff --git a/packages/template-retail-react-app/app/components/field/index.jsx b/packages/template-retail-react-app/app/components/field/index.jsx index 285873e467..f90e22d186 100644 --- a/packages/template-retail-react-app/app/components/field/index.jsx +++ b/packages/template-retail-react-app/app/components/field/index.jsx @@ -39,14 +39,13 @@ const Field = ({ const PasswordIcon = hidePassword ? VisibilityIcon : VisibilityOffIcon const inputType = type === 'password' && hidePassword ? 'password' : type === 'password' ? 'text' : type - return ( { + render={({field: {onChange, value, ref}}) => { const _inputProps = typeof inputProps === 'function' ? inputProps({value, onChange}) : inputProps diff --git a/packages/template-retail-react-app/app/components/footer/index.jsx b/packages/template-retail-react-app/app/components/footer/index.jsx index 0c26448363..7fc6f112b5 100644 --- a/packages/template-retail-react-app/app/components/footer/index.jsx +++ b/packages/template-retail-react-app/app/components/footer/index.jsx @@ -12,13 +12,12 @@ import { Divider, SimpleGrid, useMultiStyleConfig, - StylesProvider, - Select, - useStyles, + Select as ChakraSelect, Heading, Input, InputGroup, InputRightElement, + createStylesContext, Button, FormControl } from '@chakra-ui/react' @@ -30,17 +29,26 @@ import {HideOnDesktop, HideOnMobile} from 'retail-react-app/app/components/respo import {getPathWithLocale} from 'retail-react-app/app/utils/url' import LocaleText from 'retail-react-app/app/components/locale-text' import useMultiSite from 'retail-react-app/app/hooks/use-multi-site' +import styled from '@emotion/styled' +const [StylesProvider, useStyles] = createStylesContext('Footer') const Footer = ({...otherProps}) => { const styles = useMultiStyleConfig('Footer') const intl = useIntl() const [locale, setLocale] = useState(intl.locale) const {site, buildUrl} = useMultiSite() const {l10n} = site - const supportedLocaleIds = l10n?.supportedLocales.map((locale) => locale.id) const showLocaleSelector = supportedLocaleIds?.length > 1 + // NOTE: this is a workaround to fix hydration error, by making sure that the `option.selected` property is set. + // For some reason, adding some styles prop (to the option element) prevented `selected` from being set. + // So now we add the styling to the parent element instead. + const Select = styled(ChakraSelect)({ + // Targeting the child element + option: styles.localeDropdownOption + }) + return ( @@ -132,7 +140,7 @@ const Footer = ({...otherProps}) => { {...otherProps} > @@ -190,7 +194,6 @@ export default Footer const Subscribe = ({...otherProps}) => { const styles = useStyles() const intl = useIntl() - return ( @@ -208,7 +211,10 @@ const Subscribe = ({...otherProps}) => { - + {/* Had to swap the following InputRightElement and Input + to avoid the hydration error due to mismatched html between server and client side. + This is a workaround for Lastpass plugin that automatically injects its icon for input fields. + */} + diff --git a/packages/template-retail-react-app/app/components/forms/login-fields.jsx b/packages/template-retail-react-app/app/components/forms/login-fields.jsx index 3185210ee2..c673ae4020 100644 --- a/packages/template-retail-react-app/app/components/forms/login-fields.jsx +++ b/packages/template-retail-react-app/app/components/forms/login-fields.jsx @@ -12,7 +12,6 @@ import Field from 'retail-react-app/app/components/field' const LoginFields = ({form, prefix = ''}) => { const fields = useLoginFields({form, prefix}) - return ( diff --git a/packages/template-retail-react-app/app/components/forms/useAddressFields.jsx b/packages/template-retail-react-app/app/components/forms/useAddressFields.jsx index 71daff3e64..8ff9686fef 100644 --- a/packages/template-retail-react-app/app/components/forms/useAddressFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useAddressFields.jsx @@ -34,10 +34,17 @@ const messages = defineMessages({ * A React hook that provides the field definitions for an address form. * @param {Object} form - The object returned from `useForm` * @param {Object} form.control - The form control object - * @param {Object} form.errors - An object containing field errors + * @param {Object} form.formState.errors - An object containing field errors * @returns {Object} Field definitions for use in a form */ -export default function useAddressFields({form: {watch, control, errors}, prefix = ''}) { +export default function useAddressFields({ + form: { + watch, + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const countryCode = watch('countryCode') diff --git a/packages/template-retail-react-app/app/components/forms/useCreditCardFields.jsx b/packages/template-retail-react-app/app/components/forms/useCreditCardFields.jsx index dbb4d80e60..2b71817b27 100644 --- a/packages/template-retail-react-app/app/components/forms/useCreditCardFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useCreditCardFields.jsx @@ -42,7 +42,13 @@ const messages = defineMessages({ * @param {Object} form.errors - An object containing field errors * @returns {Object} Field definitions for use in a form */ -export default function useCreditCardFields({form: {control, errors}, prefix = ''}) { +export default function useCreditCardFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/forms/useLoginFields.jsx b/packages/template-retail-react-app/app/components/forms/useLoginFields.jsx index d27db13122..35a47b61c7 100644 --- a/packages/template-retail-react-app/app/components/forms/useLoginFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useLoginFields.jsx @@ -6,9 +6,14 @@ */ import {useIntl} from 'react-intl' -export default function useLoginFields({form: {control, errors}, prefix = ''}) { +export default function useLoginFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() - const fields = { email: { name: `${prefix}email`, @@ -22,7 +27,7 @@ export default function useLoginFields({form: {control, errors}, prefix = ''}) { id: 'use_login_fields.error.required_email' }) }, - error: errors[`${prefix}email`], + error: errors?.[`${prefix}email`], control }, password: { @@ -39,10 +44,9 @@ export default function useLoginFields({form: {control, errors}, prefix = ''}) { id: 'use_login_fields.error.required_password' }) }, - error: errors[`${prefix}password`], + error: errors?.[`${prefix}password`], control } } - return fields } diff --git a/packages/template-retail-react-app/app/components/forms/useProfileFields.jsx b/packages/template-retail-react-app/app/components/forms/useProfileFields.jsx index 638986eaeb..f77d2a8d25 100644 --- a/packages/template-retail-react-app/app/components/forms/useProfileFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useProfileFields.jsx @@ -7,7 +7,13 @@ import {useIntl} from 'react-intl' import {formatPhoneNumber} from 'retail-react-app/app/utils/phone-utils' -export default function useProfileFields({form: {control, errors}, prefix = ''}) { +export default function useProfileFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/forms/usePromoCodeFields.jsx b/packages/template-retail-react-app/app/components/forms/usePromoCodeFields.jsx index d604c2ee37..d5ef46387b 100644 --- a/packages/template-retail-react-app/app/components/forms/usePromoCodeFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/usePromoCodeFields.jsx @@ -6,7 +6,13 @@ */ import {useIntl} from 'react-intl' -export default function usePromoCodeFields({form: {control, errors}, prefix = ''}) { +export default function usePromoCodeFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/forms/useRegistrationFields.jsx b/packages/template-retail-react-app/app/components/forms/useRegistrationFields.jsx index 83b0978468..29a034e876 100644 --- a/packages/template-retail-react-app/app/components/forms/useRegistrationFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useRegistrationFields.jsx @@ -7,7 +7,13 @@ import {useIntl} from 'react-intl' import {validatePassword} from 'retail-react-app/app/utils/password-utils' -export default function useRegistrationFields({form: {control, errors}, prefix = ''}) { +export default function useRegistrationFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/forms/useResetPasswordFields.jsx b/packages/template-retail-react-app/app/components/forms/useResetPasswordFields.jsx index 21b88732e8..5f234aff85 100644 --- a/packages/template-retail-react-app/app/components/forms/useResetPasswordFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useResetPasswordFields.jsx @@ -6,7 +6,13 @@ */ import {useIntl} from 'react-intl' -export default function useResetPasswordFields({form: {control, errors}, prefix = ''}) { +export default function useResetPasswordFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/forms/useUpdatePasswordFields.jsx b/packages/template-retail-react-app/app/components/forms/useUpdatePasswordFields.jsx index b1a591d280..10b5a9b341 100644 --- a/packages/template-retail-react-app/app/components/forms/useUpdatePasswordFields.jsx +++ b/packages/template-retail-react-app/app/components/forms/useUpdatePasswordFields.jsx @@ -7,7 +7,13 @@ import {useIntl} from 'react-intl' import {validatePassword} from 'retail-react-app/app/utils/password-utils' -export default function useUpdatePasswordFields({form: {control, errors}, prefix = ''}) { +export default function useUpdatePasswordFields({ + form: { + control, + formState: {errors} + }, + prefix = '' +}) { const {formatMessage} = useIntl() const fields = { diff --git a/packages/template-retail-react-app/app/components/header/index.jsx b/packages/template-retail-react-app/app/components/header/index.jsx index 070f553706..4580eda5d1 100644 --- a/packages/template-retail-react-app/app/components/header/index.jsx +++ b/packages/template-retail-react-app/app/components/header/index.jsx @@ -44,10 +44,10 @@ import { SignoutIcon } from 'retail-react-app/app/components/icons' -import {noop} from 'retail-react-app/app/utils/utils' import {navLinks, messages} from 'retail-react-app/app/pages/account/constant' import useNavigation from 'retail-react-app/app/hooks/use-navigation' import LoadingSpinner from 'retail-react-app/app/components/loading-spinner' +import {isHydrated, noop} from 'retail-react-app/app/utils/utils' const ENTER_KEY = 'Enter' @@ -86,7 +86,6 @@ const Header = ({ const {isRegistered} = useCustomerType() const logout = useAuthHelper(AuthHelpers.Logout) const navigate = useNavigation() - const {isOpen, onClose, onOpen} = useDisclosure() const [isDesktop] = useMediaQuery('(min-width: 992px)') @@ -115,7 +114,6 @@ const Header = ({ if (!hasEnterPopoverContent.current) onClose() }, 100) } - return ( @@ -166,7 +164,7 @@ const Header = ({ })} /> - {isRegistered && ( + {isRegistered && isHydrated() && ( { + const user = userEvent.setup() const history = createMemoryHistory() // mock push function history.push = jest.fn() @@ -169,13 +170,14 @@ test('route to wishlist page when an authenticated users click on wishlist icon' expect(accountTrigger).toBeInTheDocument() }) const wishlistIcon = screen.getByRole('button', {name: /wishlist/i}) - userEvent.click(wishlistIcon) + await user.click(wishlistIcon) await waitFor(() => { expect(history.push).toHaveBeenCalledWith(createPathWithDefaults('/account/wishlist')) }) }) test('shows dropdown menu when an authenticated users hover on the account icon', async () => { + const user = userEvent.setup() global.server.use( rest.post('*/customers/action/login', (req, res, ctx) => { return res(ctx.delay(0), ctx.status(200), ctx.json(mockedRegisteredCustomer)) @@ -198,7 +200,7 @@ test('shows dropdown menu when an authenticated users hover on the account icon' await waitFor(() => { expect(history.push).toHaveBeenCalledWith(createPathWithDefaults('/account')) }) - userEvent.hover(accountIcon) + await user.hover(accountIcon) await waitFor(() => { expect(screen.getByText(/account details/i)).toBeInTheDocument() diff --git a/packages/template-retail-react-app/app/components/item-variant/item-price.jsx b/packages/template-retail-react-app/app/components/item-variant/item-price.jsx index 473e8b78fd..bfd3edf9a8 100644 --- a/packages/template-retail-react-app/app/components/item-variant/item-price.jsx +++ b/packages/template-retail-react-app/app/components/item-variant/item-price.jsx @@ -61,7 +61,7 @@ const ItemPrice = ({currency, align = 'right', baseDirection = 'column', ...prop justifyContent={align === 'left' ? 'flex-start' : 'flex-end'} alignItems="baseline" spacing={hasDiscount ? 0 : 1} - wrap="row" + wrap="nowrap" {...props} > {basePrice && price !== basePrice && ( diff --git a/packages/template-retail-react-app/app/components/list-menu/index.test.js b/packages/template-retail-react-app/app/components/list-menu/index.test.js index b00790a8d5..d4a4aa5502 100644 --- a/packages/template-retail-react-app/app/components/list-menu/index.test.js +++ b/packages/template-retail-react-app/app/components/list-menu/index.test.js @@ -5,21 +5,23 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import React from 'react' -import {screen, waitFor} from '@testing-library/react' +import {screen} from '@testing-library/react' import ListMenu from 'retail-react-app/app/components/list-menu/index' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' import {mockCategories} from 'retail-react-app/app/mocks/mock-data' +import userEvent from '@testing-library/user-event' describe('ListMenu', () => { test('ListMenu renders without errors', async () => { + const user = userEvent.setup() renderWithProviders() - const drawer = document.getElementById('chakra-toast-portal') - - const category = await waitFor(() => screen.getByText(/Mens/i)) - expect(category).toBeInTheDocument() - expect(drawer).toBeInTheDocument() + const categoryTrigger = screen.getByText(/Mens/i) + await user.hover(categoryTrigger) + expect(categoryTrigger).toBeInTheDocument() expect(screen.getByRole('navigation', {name: 'main'})).toBeInTheDocument() + const suit = screen.getByText(/suits/i) + expect(suit).toBeInTheDocument() }) test('ListMenu renders Spinner without root categories', () => { renderWithProviders(, { diff --git a/packages/template-retail-react-app/app/components/locale-selector/index.jsx b/packages/template-retail-react-app/app/components/locale-selector/index.jsx index 1e330646f5..efa652218a 100644 --- a/packages/template-retail-react-app/app/components/locale-selector/index.jsx +++ b/packages/template-retail-react-app/app/components/locale-selector/index.jsx @@ -15,6 +15,7 @@ import { AccordionItem, AccordionPanel, Box, + Text, // Hooks useStyleConfig @@ -66,7 +67,9 @@ const LocaleSelector = ({selectedLocale = '', locales = [], onSelect = () => {}, )} {/* Display flag icon if one exists */} {flags[selectedLocale]} - + + + @@ -80,10 +83,9 @@ const LocaleSelector = ({selectedLocale = '', locales = [], onSelect = () => {}, {flags[locale]} {/* Locale name */} - + + + {/* Selection indicator */} {selectedLocale === locale && ( diff --git a/packages/template-retail-react-app/app/components/locale-text/index.jsx b/packages/template-retail-react-app/app/components/locale-text/index.jsx index 6976a540b9..bb3fa37fa4 100644 --- a/packages/template-retail-react-app/app/components/locale-text/index.jsx +++ b/packages/template-retail-react-app/app/components/locale-text/index.jsx @@ -8,21 +8,19 @@ import React from 'react' import PropTypes from 'prop-types' import {defineMessages, useIntl} from 'react-intl' -import {chakra, Text} from '@chakra-ui/react' -const LocaleText = ({shortCode, as, ...otherProps}) => { +const LocaleText = ({shortCode}) => { const intl = useIntl() - const Wrapper = as ? chakra(as) : Text const message = LOCALE_MESSAGES[shortCode] if (!message) { console.error( `No locale message found for "${shortCode}". Please update the list accordingly.` ) - return Unknown {shortCode} + return <>Unknown {shortCode} } - return {intl.formatMessage(message)} + return <>{intl.formatMessage(message)} } LocaleText.displayName = 'LocaleText' @@ -31,11 +29,7 @@ LocaleText.propTypes = { /** * The locale shortcode that you would like the localized text for. */ - shortCode: PropTypes.string.isRequired, - /** - * The element type to render this component as, defaults to a Text component. - */ - as: PropTypes.string + shortCode: PropTypes.string.isRequired } export default LocaleText diff --git a/packages/template-retail-react-app/app/components/locale-text/index.test.js b/packages/template-retail-react-app/app/components/locale-text/index.test.js index 2d7d56fa5d..1e6213af9a 100644 --- a/packages/template-retail-react-app/app/components/locale-text/index.test.js +++ b/packages/template-retail-react-app/app/components/locale-text/index.test.js @@ -9,29 +9,28 @@ import LocaleText from 'retail-react-app/app/components/locale-text/index' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' test('Renders LocaleText', () => { - renderWithProviders() - const text = document.querySelector('.chakra-text') - - expect(text).toBeInTheDocument() -}) - -test('Renders LocaleText with as type', () => { - renderWithProviders() - - const text = document.querySelector('option.test-class') - - expect(text).toBeInTheDocument() + renderWithProviders( +
+ +
+ ) + const el = document.querySelector('div') + expect(el.textContent).toBe('English (United Kingdom)') }) test('Warns on missing shortCode message definition', () => { jest.spyOn(console, 'error') - renderWithProviders() + renderWithProviders( +
+ +
+ ) - const text = document.querySelector('.chakra-text') + const el = document.querySelector('div') expect(console.error.mock.calls[0][0]).toContain( `No locale message found for "fa-KE". Please update the list accordingly.` ) - expect(text).toBeInTheDocument() + expect(el.textContent).toBe('Unknown fa-KE') }) diff --git a/packages/template-retail-react-app/app/components/login/index.jsx b/packages/template-retail-react-app/app/components/login/index.jsx index 89b2239ee3..dfb5de4f5f 100644 --- a/packages/template-retail-react-app/app/components/login/index.jsx +++ b/packages/template-retail-react-app/app/components/login/index.jsx @@ -31,11 +31,11 @@ const LoginForm = ({submitForm, clickForgotPassword = noop, clickCreateAccount = data-testid="sf-auth-modal-form" > - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} @@ -54,7 +54,9 @@ const LoginForm = ({submitForm, clickForgotPassword = noop, clickCreateAccount = - {isOpen && ( - - )} +
) } @@ -36,6 +35,17 @@ MockComponent.propTypes = { updateCart: PropTypes.func } +beforeEach(() => { + prependHandlersToServer([ + { + path: '*/products/:productId', + res: () => { + return mockProductDetail + } + } + ]) +}) + test('renders product view modal by default', () => { renderWithProviders() diff --git a/packages/template-retail-react-app/app/components/register/index.jsx b/packages/template-retail-react-app/app/components/register/index.jsx index a4041f68ec..e685b7033d 100644 --- a/packages/template-retail-react-app/app/components/register/index.jsx +++ b/packages/template-retail-react-app/app/components/register/index.jsx @@ -39,11 +39,11 @@ const RegisterForm = ({submitForm, clickSignIn = noop, form}) => { data-testid="sf-auth-modal-form-register" > - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} diff --git a/packages/template-retail-react-app/app/components/reset-password/index.jsx b/packages/template-retail-react-app/app/components/reset-password/index.jsx index 483c0a7621..b6fe718b08 100644 --- a/packages/template-retail-react-app/app/components/reset-password/index.jsx +++ b/packages/template-retail-react-app/app/components/reset-password/index.jsx @@ -35,11 +35,11 @@ const ResetPasswordForm = ({submitForm, clickSignIn = noop, form}) => {
- {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} diff --git a/packages/template-retail-react-app/app/components/search/index.test.js b/packages/template-retail-react-app/app/components/search/index.test.js index 12998f3df3..87cb04fac7 100644 --- a/packages/template-retail-react-app/app/components/search/index.test.js +++ b/packages/template-retail-react-app/app/components/search/index.test.js @@ -6,8 +6,8 @@ */ import React from 'react' import {renderWithProviders, createPathWithDefaults} from 'retail-react-app/app/utils/test-utils' -import user from '@testing-library/user-event' -import {screen, waitFor, within, act} from '@testing-library/react' +import userEvent from '@testing-library/user-event' +import {screen, waitFor, within} from '@testing-library/react' import SearchInput from 'retail-react-app/app/components/search/index' import Suggestions from 'retail-react-app/app/components/search/partials/suggestions' import { @@ -42,10 +42,10 @@ test('renders SearchInput', () => { }) test('changes url when enter is pressed', async () => { - await act(async () => { - renderWithProviders(, { - wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} - }) + const user = userEvent.setup() + + renderWithProviders(, { + wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) const searchInput = document.querySelector('input[type="search"]') await user.type(searchInput, 'Dresses{enter}') @@ -58,10 +58,12 @@ test('changes url when enter is pressed', async () => { }) test('shows previously searched items when focused', async () => { + const user = userEvent.setup() + setSessionJSONItem(RECENT_SEARCH_KEY, ['Dresses', 'Suits', 'Tops']) renderWithProviders() const searchInput = document.querySelector('input[type="search"]') - user.clear(searchInput) + await user.clear(searchInput) await searchInput.focus() const suggestionPopoverEl = await screen.getByTestId('sf-suggestion-popover') const recentSearchesEl = await within(suggestionPopoverEl).getByTestId('sf-suggestion-recent') @@ -72,6 +74,7 @@ test('shows previously searched items when focused', async () => { }) test('saves recent searches on submit', async () => { + const user = userEvent.setup() setSessionJSONItem(RECENT_SEARCH_KEY, ['Dresses', 'Suits', 'Tops']) renderWithProviders() const searchInput = document.querySelector('input[type="search"]') @@ -80,6 +83,8 @@ test('saves recent searches on submit', async () => { }) test('limits number of saved recent searches', async () => { + const user = userEvent.setup() + setSessionJSONItem(RECENT_SEARCH_KEY, ['Dresses', 'Suits', 'Tops', 'Gloves', 'Bracelets']) renderWithProviders() const searchInput = document.querySelector('input[type="search"]') @@ -88,9 +93,8 @@ test('limits number of saved recent searches', async () => { }) test('suggestions render when there are some', async () => { - await act(() => { - renderWithProviders() - }) + const user = userEvent.setup() + renderWithProviders() const searchInput = document.querySelector('input[type="search"]') await user.type(searchInput, 'Dress') expect(searchInput.value).toBe('Dress') @@ -102,6 +106,7 @@ test('suggestions render when there are some', async () => { }) test('clicking clear searches clears recent searches', async () => { + const user = userEvent.setup() setSessionJSONItem(RECENT_SEARCH_KEY, ['Dresses', 'Suits', 'Tops']) renderWithProviders() const searchInput = document.querySelector('input[type="search"]') diff --git a/packages/template-retail-react-app/app/constants.js b/packages/template-retail-react-app/app/constants.js index 1f9b183b3b..4f65a7e65b 100644 --- a/packages/template-retail-react-app/app/constants.js +++ b/packages/template-retail-react-app/app/constants.js @@ -95,3 +95,15 @@ export const TOAST_MESSAGE_REMOVED_FROM_WISHLIST = defineMessage({ id: 'global.info.removed_from_wishlist', defaultMessage: 'Item removed from wishlist' }) + +// Einstein recommender constants used in +export const EINSTEIN_RECOMMENDERS = { + ADD_TO_CART_MODAL: 'pdp-similar-items', + CART_RECENTLY_VIEWED: 'viewed-recently-einstein', + CART_MAY_ALSO_LIKE: 'product-to-product-einstein', + PDP_COMPLETE_SET: 'complete-the-set', + PDP_MIGHT_ALSO_LIKE: 'pdp-similar-items', + PDP_RECENTLY_VIEWED: 'viewed-recently-einstein', + EMPTY_SEARCH_RESULTS_TOP_SELLERS: 'home-top-revenue-for-category', + EMPTY_SEARCH_RESULTS_MOST_VIEWED: 'products-in-all-categories' +} diff --git a/packages/template-retail-react-app/app/hoc/with-registration/index.test.js b/packages/template-retail-react-app/app/hoc/with-registration/index.test.js index 3b1bc7e3c4..ea5d057a3a 100644 --- a/packages/template-retail-react-app/app/hoc/with-registration/index.test.js +++ b/packages/template-retail-react-app/app/hoc/with-registration/index.test.js @@ -9,7 +9,7 @@ import {Button} from '@chakra-ui/react' import {screen, waitFor} from '@testing-library/react' import withRegistration from 'retail-react-app/app/hoc/with-registration/index' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' -import user from '@testing-library/user-event' +import userEvent from '@testing-library/user-event' import {rest} from 'msw' import {mockedGuestCustomer} from 'retail-react-app/app/mocks/mock-data' @@ -37,12 +37,14 @@ afterEach(() => { describe('Registered users tests', function () { test('should execute onClick for registered users', async () => { + const user = userEvent.setup() + const onClick = jest.fn() renderWithProviders() const trigger = screen.getByText(/button/i) expect(trigger).toBeInTheDocument() - user.click(trigger) + await user.click(trigger) await waitFor(() => { expect(onClick).toHaveBeenCalledTimes(1) @@ -59,6 +61,7 @@ describe('Guest user tests', function () { ) }) test('should show login modal if user not registered', async () => { + const user = userEvent.setup() const onClick = jest.fn() renderWithProviders( Button, @@ -70,9 +73,8 @@ describe('Guest user tests', function () { ) const trigger = await screen.findByText(/button/i) - await waitFor(() => { - user.click(trigger) - }) + await user.click(trigger) + await waitFor(() => { expect(screen.getByLabelText(/email/i)).toBeInTheDocument() expect(screen.getByLabelText(/Password/)).toBeInTheDocument() diff --git a/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.js b/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.js index c72064c585..a749fc17dd 100644 --- a/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.js +++ b/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.js @@ -30,6 +30,7 @@ import RecommendedProducts from 'retail-react-app/app/components/recommended-pro import {LockIcon} from 'retail-react-app/app/components/icons' import {findImageGroupBy} from 'retail-react-app/app/utils/image-groups-utils' import {getDisplayVariationValues} from 'retail-react-app/app/utils/product-utils' +import {EINSTEIN_RECOMMENDERS} from 'retail-react-app/app/constants' /** * This is the context for managing the AddToCartModal. @@ -232,7 +233,7 @@ export const AddToCartModal = () => { id="add_to_cart_modal.recommended_products.title.might_also_like" /> } - recommender={'pdp-similar-items'} + recommender={EINSTEIN_RECOMMENDERS.ADD_TO_CART_MODAL} products={[product]} mx={{base: -4, md: -8, lg: 0}} shouldFetch={() => product?.id} diff --git a/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.test.js b/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.test.js index fbba88adc0..32f0b414c0 100644 --- a/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.test.js +++ b/packages/template-retail-react-app/app/hooks/use-add-to-cart-modal.test.js @@ -581,6 +581,7 @@ test('Renders AddToCartModal with multiple products', () => { { product: MOCK_PRODUCT, variant: MOCK_PRODUCT.variants[0], + id: '701642811399M', quantity: 22 }, { diff --git a/packages/template-retail-react-app/app/hooks/use-auth-modal.test.js b/packages/template-retail-react-app/app/hooks/use-auth-modal.test.js index da6d0970c7..3bb3784240 100644 --- a/packages/template-retail-react-app/app/hooks/use-auth-modal.test.js +++ b/packages/template-retail-react-app/app/hooks/use-auth-modal.test.js @@ -7,7 +7,7 @@ import React from 'react' import PropTypes from 'prop-types' import {screen, within, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' +import userEvent from '@testing-library/user-event' import { renderWithProviders, createPathWithDefaults, @@ -104,22 +104,28 @@ afterEach(() => { }) test('Renders login modal by default', async () => { + const user = userEvent.setup() + renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) - expect(screen.getByText(/welcome back/i)).toBeInTheDocument() - expect(screen.getByLabelText(/email/i)).toBeInTheDocument() - expect(screen.getByLabelText(/Password/)).toBeInTheDocument() - expect(screen.getByText(/forgot password/i)).toBeInTheDocument() - expect(screen.getByText(/sign in/i)).toBeInTheDocument() + await waitFor(() => { + expect(screen.getByText(/welcome back/i)).toBeInTheDocument() + expect(screen.getByLabelText(/email/i)).toBeInTheDocument() + expect(screen.getByLabelText(/Password/)).toBeInTheDocument() + expect(screen.getByText(/forgot password/i)).toBeInTheDocument() + expect(screen.getByText(/sign in/i)).toBeInTheDocument() + }) }) // TODO: Fix flaky/broken test // eslint-disable-next-line jest/no-disabled-tests test.skip('Renders error when given incorrect log in credentials', async () => { + const user = userEvent.setup() + // render our test component renderWithProviders(, { wrapperProps: { @@ -129,11 +135,11 @@ test.skip('Renders error when given incorrect log in credentials', async () => { // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) // enter credentials and submit - user.type(screen.getByLabelText('Email'), 'bad@test.com') - user.type(screen.getByLabelText('Password'), 'SomeFakePassword1!') + await user.type(screen.getByLabelText('Email'), 'bad@test.com') + await user.type(screen.getByLabelText('Password'), 'SomeFakePassword1!') // mock failed auth request global.server.use( @@ -145,7 +151,7 @@ test.skip('Renders error when given incorrect log in credentials', async () => { }) ) - user.click(screen.getByText(/sign in/i)) + await user.click(screen.getByText(/sign in/i)) // give it some time to show the error in the form await waitFor( () => { @@ -160,9 +166,9 @@ test.skip('Renders error when given incorrect log in credentials', async () => { ) }) -// TODO: investigate why this test is failing when running with other tests -// eslint-disable-next-line jest/no-disabled-tests -test.skip('Allows customer to create an account', async () => { +test('Allows customer to create an account', async () => { + const user = userEvent.setup() + // render our test component renderWithProviders(, { wrapperProps: { @@ -173,14 +179,14 @@ test.skip('Allows customer to create an account', async () => { // open the modal const trigger = screen.getByText('Open Modal') - user.click(trigger) + await user.click(trigger) let form await waitFor(() => { form = screen.queryByTestId('sf-auth-modal-form') expect(form).toBeInTheDocument() }) const createAccount = screen.getByText(/create account/i) - user.click(createAccount) + await user.click(createAccount) let registerForm await waitFor(() => { registerForm = screen.getByTestId('sf-auth-modal-form-register') @@ -194,10 +200,10 @@ test.skip('Allows customer to create an account', async () => { expect(firstName).toBeInTheDocument() }) - user.paste(withinForm.getByLabelText('First Name'), 'Tester') - user.paste(withinForm.getByLabelText('Last Name'), 'Tester') - user.paste(withinForm.getByPlaceholderText(/you@email.com/i), 'customer@test.com') - user.paste(withinForm.getAllByLabelText(/password/i)[0], 'Password!1') + await user.type(withinForm.getByLabelText('First Name'), 'Tester') + await user.type(withinForm.getByLabelText('Last Name'), 'Tester') + await user.type(withinForm.getByPlaceholderText(/you@email.com/i), 'customer@test.com') + await user.type(withinForm.getAllByLabelText(/password/i)[0], 'Password!1') // login with credentials global.server.use( @@ -223,7 +229,7 @@ test.skip('Allows customer to create an account', async () => { }) ) const submitButton = withinForm.getByText(/create account/i) - user.click(submitButton) + await user.click(submitButton) await waitFor(() => { expect(form).not.toBeInTheDocument() @@ -244,6 +250,8 @@ test.skip('Allows customer to create an account', async () => { // TODO: investingate why this test is failing when running with other tests // eslint-disable-next-line jest/no-disabled-tests test.skip('Allows customer to sign in to their account', async () => { + const user = userEvent.setup() + // render our test component renderWithProviders(, { wrapperProps: { @@ -253,11 +261,11 @@ test.skip('Allows customer to sign in to their account', async () => { // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) // enter credentials and submit - user.type(screen.getByLabelText('Email'), 'customer@test.com') - user.type(screen.getByLabelText('Password'), 'Password!1') + await user.type(screen.getByLabelText('Email'), 'customer@test.com') + await user.type(screen.getByLabelText('Password'), 'Password!1') // login with credentials global.server.use( @@ -276,7 +284,7 @@ test.skip('Allows customer to sign in to their account', async () => { ) ) ) - user.click(screen.getByText(/sign in/i)) + await user.click(screen.getByText(/sign in/i)) // allow time to transition to account page await waitFor( @@ -300,6 +308,8 @@ describe('Reset password', function () { // TODO: Fix flaky/broken test // eslint-disable-next-line jest/no-disabled-tests test.skip('Allows customer to generate password token', async () => { + const user = userEvent.setup() + // render our test component renderWithProviders(, { wrapperProps: { @@ -309,7 +319,7 @@ describe('Reset password', function () { // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) expect(authModal.isOpen).toBe(true) // enter credentials and submit @@ -318,8 +328,8 @@ describe('Reset password', function () { let resetPwForm = await screen.findByTestId('sf-auth-modal-form-reset-pw') expect(resetPwForm).toBeInTheDocument() const withinForm = within(resetPwForm) - user.type(withinForm.getByLabelText('Email'), 'foo@test.com') - user.click(withinForm.getByText(/reset password/i)) + await user.type(withinForm.getByLabelText('Email'), 'foo@test.com') + await user.click(withinForm.getByText(/reset password/i)) // wait for success state await waitFor(() => { @@ -330,13 +340,15 @@ describe('Reset password', function () { // TODO: Fix flaky/broken test // eslint-disable-next-line jest/no-disabled-tests - test.skip('Allows customer to open generate password token modal from everywhere', () => { + test.skip('Allows customer to open generate password token modal from everywhere', async () => { + const user = userEvent.setup() + // render our test component renderWithProviders() // open the modal const trigger = screen.getByText(/open modal/i) - user.click(trigger) + await user.click(trigger) expect(authModal.isOpen).toBe(true) const withinForm = within(screen.getByTestId('sf-auth-modal-form')) @@ -345,7 +357,7 @@ describe('Reset password', function () { // close the modal const switchToSignIn = screen.getByText(/Sign in/i) - user.click(switchToSignIn) + await user.click(switchToSignIn) // check that the modal is closed expect(authModal.isOpen).toBe(false) diff --git a/packages/template-retail-react-app/app/hooks/use-currency.test.js b/packages/template-retail-react-app/app/hooks/use-currency.test.js index 9930427e77..ccf6144ab7 100644 --- a/packages/template-retail-react-app/app/hooks/use-currency.test.js +++ b/packages/template-retail-react-app/app/hooks/use-currency.test.js @@ -6,7 +6,7 @@ */ import React from 'react' -import {renderHook} from '@testing-library/react-hooks' +import {renderHook} from '@testing-library/react' import {useCurrency} from 'retail-react-app/app/hooks/use-currency' import {CurrencyProvider} from 'retail-react-app/app/contexts' import {DEFAULT_CURRENCY} from 'retail-react-app/app/constants' diff --git a/packages/template-retail-react-app/app/hooks/use-multi-site.test.js b/packages/template-retail-react-app/app/hooks/use-multi-site.test.js index 145f010997..f6bdf98942 100644 --- a/packages/template-retail-react-app/app/hooks/use-multi-site.test.js +++ b/packages/template-retail-react-app/app/hooks/use-multi-site.test.js @@ -6,7 +6,7 @@ */ import React from 'react' -import {renderHook} from '@testing-library/react-hooks' +import {renderHook} from '@testing-library/react' import useMultiSite from 'retail-react-app/app/hooks/use-multi-site' import {MultiSiteProvider} from 'retail-react-app/app/contexts' import mockConfig from 'retail-react-app/config/mocks/default' diff --git a/packages/template-retail-react-app/app/hooks/use-navigation.test.js b/packages/template-retail-react-app/app/hooks/use-navigation.test.js index 8d3edff4df..4ecc9c6794 100644 --- a/packages/template-retail-react-app/app/hooks/use-navigation.test.js +++ b/packages/template-retail-react-app/app/hooks/use-navigation.test.js @@ -5,7 +5,7 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import React from 'react' -import user from '@testing-library/user-event' +import userEvent from '@testing-library/user-event' import useNavigation from 'retail-react-app/app/hooks/use-navigation' import mockConfig from 'retail-react-app/config/mocks/default' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' @@ -50,16 +50,20 @@ const TestComponent = () => { ) } -test('prepends locale and site and calls history.push', () => { +test('prepends locale and site and calls history.push', async () => { + const user = userEvent.setup() + getConfig.mockImplementation(() => mockConfig) const {getByTestId} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) - user.click(getByTestId('page1-link')) + await user.click(getByTestId('page1-link')) expect(mockHistoryPush).toHaveBeenCalledWith('/uk/en-GB/page1') }) -test('append locale as path and site as query and calls history.push', () => { +test('append locale as path and site as query and calls history.push', async () => { + const user = userEvent.setup() + const newConfig = { ...mockConfig, app: { @@ -75,27 +79,31 @@ test('append locale as path and site as query and calls history.push', () => { const {getByTestId} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: newConfig.app} }) - user.click(getByTestId('page1-link')) + await user.click(getByTestId('page1-link')) expect(mockHistoryPush).toHaveBeenCalledWith('/en-GB/page1?site=uk') }) -test('works for any history method and args', () => { +test('works for any history method and args', async () => { + const user = userEvent.setup() + getConfig.mockImplementation(() => mockConfig) const {getByTestId} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) - user.click(getByTestId('page2-link')) + await user.click(getByTestId('page2-link')) expect(mockHistoryReplace).toHaveBeenCalledWith('/uk/en-GB/page2', {}) }) -test('if given the path to root or homepage, will not prepend the locale', () => { +test('if given the path to root or homepage, will not prepend the locale', async () => { + const user = userEvent.setup() + getConfig.mockImplementation(() => mockConfig) const {getByTestId} = renderWithProviders(, { wrapperProps: {siteAlias: 'us', locale: 'en-US'} }) - user.click(getByTestId('page4-link')) + await user.click(getByTestId('page4-link')) expect(mockHistoryPush).toHaveBeenCalledWith('/') }) diff --git a/packages/template-retail-react-app/app/hooks/use-product-view-modal.test.js b/packages/template-retail-react-app/app/hooks/use-product-view-modal.test.js index adc2fb8a25..f02fe1e7f8 100644 --- a/packages/template-retail-react-app/app/hooks/use-product-view-modal.test.js +++ b/packages/template-retail-react-app/app/hooks/use-product-view-modal.test.js @@ -80,11 +80,13 @@ describe('useProductViewModal hook', () => { const toggleButton = screen.getByText(/Toggle the content/) fireEvent.click(toggleButton) - expect(screen.getByText('750518699578M')).toBeInTheDocument() - expect(await screen.getByText(/isFetching: false/i)).toBeInTheDocument() - expect(screen.getByTestId('variant')).toHaveTextContent( - '{"orderable":true,"price":299.99,"productId":"750518699578M","variationValues":{"color":"BLACKFB","size":"038","width":"V"}}' - ) + await waitFor(() => { + expect(screen.getByText('750518699578M')).toBeInTheDocument() + expect(screen.getByText(/isFetching: false/i)).toBeInTheDocument() + expect(screen.getByTestId('variant')).toHaveTextContent( + '{"orderable":true,"price":299.99,"productId":"750518699578M","variationValues":{"color":"BLACKFB","size":"038","width":"V"}}' + ) + }) }) test("update product's related url param when the product content is shown", () => { @@ -141,7 +143,7 @@ describe('useProductViewModal hook', () => { }) }) - test('load new variant on variant selection', () => { + test('load new variant on variant selection', async () => { const history = createMemoryHistory() history.push('/test/path') @@ -156,9 +158,12 @@ describe('useProductViewModal hook', () => { const toggleButton = screen.getByText(/Toggle the content/) fireEvent.click(toggleButton) expect(screen.getByText('750518699578M')).toBeInTheDocument() + history.push('/test/path?color=BLACKFB&size=050&width=V&pid=750518699660M') - expect(screen.getByTestId('variant')).toHaveTextContent( - '{"orderable":true,"price":299.99,"productId":"750518699660M","variationValues":{"color":"BLACKFB","size":"050","width":"V"}}' - ) + await waitFor(() => { + expect(screen.getByTestId('variant')).toHaveTextContent( + '{"orderable":true,"price":299.99,"productId":"750518699660M","variationValues":{"color":"BLACKFB","size":"050","width":"V"}}' + ) + }) }) }) diff --git a/packages/template-retail-react-app/app/hooks/use-toast.test.js b/packages/template-retail-react-app/app/hooks/use-toast.test.js index fea06cc214..facded31f7 100644 --- a/packages/template-retail-react-app/app/hooks/use-toast.test.js +++ b/packages/template-retail-react-app/app/hooks/use-toast.test.js @@ -9,7 +9,7 @@ import {useToast} from 'retail-react-app/app/hooks/use-toast' import {Button} from '@chakra-ui/react' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' +import userEvent from '@testing-library/user-event' jest.setTimeout(60000) const MockedComponent = (props) => { @@ -37,13 +37,14 @@ beforeEach(() => { }) test('renders toast with action', async () => { + const user = userEvent.setup() const handleActionClick = jest.fn() const toastAction = renderWithProviders() const toastTrigger = await screen.findByRole('button', {name: /show toast/i}) - user.click(toastTrigger) + await user.click(toastTrigger) await waitFor(() => { // Chakra UI renders multiple elements with toast title in DOM for accessibility. @@ -52,6 +53,6 @@ test('renders toast with action', async () => { }) const toastActionTrigger = await screen.findByRole('button', {name: /action/i}) - user.click(toastActionTrigger) + await user.click(toastActionTrigger) expect(handleActionClick).toHaveBeenCalledTimes(1) }) diff --git a/packages/template-retail-react-app/app/mocks/mock-data.js b/packages/template-retail-react-app/app/mocks/mock-data.js index 5dc57efce3..46dd1264c8 100644 --- a/packages/template-retail-react-app/app/mocks/mock-data.js +++ b/packages/template-retail-react-app/app/mocks/mock-data.js @@ -2488,6 +2488,35 @@ export const mockCategories = { { id: 'mens', name: 'Mens', + categories: [ + { + id: 'mens-clothing-suits', + image: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-storefront-catalog-m-non-en/default/dw14ce9267/images/slot/sub_banners/cat-banner-mens-suits.jpg', + name: 'Suits', + pageDescription: + "Shop Men's suits for business or pleasure. Enjoy from a variety of different styles and cuts at Commerce Cloud.", + pageTitle: 'Mens Suits for Business and Casual', + parentCategoryId: 'mens-clothing', + parentCategoryTree: [ + { + id: 'mens', + name: 'Mens' + }, + { + id: 'mens-clothing', + name: 'Clothing' + }, + { + id: 'mens-clothing-suits', + name: 'Suits' + } + ], + c_enableCompare: false, + c_showInMenu: true, + c_slotBannerImage: + 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-storefront-catalog-m-non-en/default/dw6228a2ea/images/slot/landing/cat-landing-slotbottom-mens-suits.jpg' + } + ], pageDescription: "Men's range. Hard-wearing boots, jackets and clothing for unbeatable comfort day in, day out. Practical, easy-to-wear styles wherever you're headed.", pageKeywords: 'mens boots, mens shoes, mens clothing, mens apparel, mens jackets', diff --git a/packages/template-retail-react-app/app/pages/account/addresses.jsx b/packages/template-retail-react-app/app/pages/account/addresses.jsx index 9e804ae8c3..523d7c614d 100644 --- a/packages/template-retail-react-app/app/pages/account/addresses.jsx +++ b/packages/template-retail-react-app/app/pages/account/addresses.jsx @@ -92,11 +92,11 @@ const ShippingAddressForm = ({form, hasAddresses, selectedAddressId, toggleEdit, - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} @@ -277,7 +277,7 @@ const AccountAddresses = () => { rounded="base" fontWeight="medium" leftIcon={} - onClick={toggleEdit} + onClick={() => toggleEdit()} > { } {isEditing && !selectedAddressId && ( - + <> + + )} {addresses.map((address) => ( @@ -357,7 +359,7 @@ const AccountAddresses = () => { defaultMessage: 'Add Address', id: 'account_addresses.page_action_placeholder.button.add_address' })} - onButtonClick={toggleEdit} + onButtonClick={() => toggleEdit()} /> )} {isEditing && !selectedAddressId && ( diff --git a/packages/template-retail-react-app/app/pages/account/addresses.test.js b/packages/template-retail-react-app/app/pages/account/addresses.test.js index dbe29f61ff..35c20b6216 100644 --- a/packages/template-retail-react-app/app/pages/account/addresses.test.js +++ b/packages/template-retail-react-app/app/pages/account/addresses.test.js @@ -6,32 +6,26 @@ */ import React from 'react' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' -import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' +import {createPathWithDefaults, renderWithProviders} from 'retail-react-app/app/utils/test-utils' import {rest} from 'msw' import AccountAddresses from 'retail-react-app/app/pages/account/addresses' import { mockedRegisteredCustomerWithNoAddress, mockedRegisteredCustomer } from 'retail-react-app/app/mocks/mock-data' -import {useCurrentCustomer} from 'retail-react-app/app/hooks/use-current-customer' -let mockCustomer = {} +import {Route, Switch} from 'react-router-dom' +import mockConfig from 'retail-react-app/config/mocks/default' -const mockToastSpy = jest.fn() -jest.mock('@chakra-ui/toast', () => { - return { - useToast: jest.fn(() => mockToastSpy) - } -}) +let mockCustomer = {} const MockedComponent = () => { - const {data: customer} = useCurrentCustomer() return ( -
- Customer Id: {customer.customerId} - -
+ + + + + ) } @@ -64,8 +58,10 @@ beforeEach(() => { return res(ctx.delay(0), ctx.status(200)) }) ) + window.history.pushState({}, 'Account', createPathWithDefaults('/account/addresses')) }) afterEach(() => { + jest.resetModules() localStorage.clear() }) @@ -75,27 +71,29 @@ test('Allows customer to add addresses', async () => { res(ctx.delay(0), ctx.status(200), ctx.json(mockedRegisteredCustomerWithNoAddress)) ) ) - renderWithProviders() + const {user} = renderWithProviders(, { + wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} + }) await waitFor(() => { expect(screen.getByText(/no saved addresses/i)).toBeInTheDocument() }) - user.click(screen.getByText(/add address/i)) - user.type(screen.getByLabelText('First Name'), 'Test') - user.type(screen.getByLabelText('Last Name'), 'McTester') - user.type(screen.getByLabelText('Phone'), '7275551234') - user.type(screen.getByLabelText('Address'), '123 Main St') - user.type(screen.getByLabelText('City'), 'Tampa') - user.selectOptions(screen.getByLabelText(/state/i), ['FL']) - user.type(screen.getByLabelText('Zip Code'), '33712') + await user.click(screen.getByText(/add address/i)) + await user.type(screen.getByLabelText('First Name'), 'Test') + await user.type(screen.getByLabelText('Last Name'), 'McTester') + await user.type(screen.getByLabelText('Phone'), '7275551234') + await user.type(screen.getByLabelText('Address'), '123 Main St') + await user.type(screen.getByLabelText('City'), 'Tampa') + await user.selectOptions(screen.getByLabelText(/state/i), ['FL']) + await user.type(screen.getByLabelText('Zip Code'), '33712') global.server.use( rest.get('*/customers/:customerId', (req, res, ctx) => res(ctx.delay(0), ctx.status(200), ctx.json(mockedRegisteredCustomer)) ) ) - user.click(screen.getByText(/^Save$/i)) + await user.click(screen.getByText(/^Save$/i)) expect(await screen.findByText(/123 Main St/i)).toBeInTheDocument() }) @@ -105,7 +103,7 @@ test('Allows customer to remove addresses', async () => { res(ctx.delay(0), ctx.status(200), ctx.json(mockedRegisteredCustomer)) ) ) - renderWithProviders() + const {user} = renderWithProviders() await waitFor(() => expect(screen.getByText('123 Main St')).toBeInTheDocument()) global.server.use( @@ -114,6 +112,6 @@ test('Allows customer to remove addresses', async () => { ) ) - user.click(screen.getByText(/remove/i)) + await user.click(screen.getByText(/remove/i)) expect(await screen.findByText(/no saved addresses/i)).toBeInTheDocument() }) diff --git a/packages/template-retail-react-app/app/pages/account/index.jsx b/packages/template-retail-react-app/app/pages/account/index.jsx index dc7ef65119..5fed227f66 100644 --- a/packages/template-retail-react-app/app/pages/account/index.jsx +++ b/packages/template-retail-react-app/app/pages/account/index.jsx @@ -39,6 +39,7 @@ import useMultiSite from 'retail-react-app/app/hooks/use-multi-site' import useEinstein from 'retail-react-app/app/hooks/use-einstein' import {useAuthHelper, AuthHelpers} from 'commerce-sdk-react-preview' import {useCurrentCustomer} from 'retail-react-app/app/hooks/use-current-customer' +import {isHydrated} from 'retail-react-app/app/utils/utils' const onClient = typeof window !== 'undefined' const LogoutButton = ({onClick}) => { @@ -91,7 +92,6 @@ const Account = () => { const einstein = useEinstein() const {buildUrl} = useMultiSite() - /**************** Einstein ****************/ useEffect(() => { einstein.sendViewPage(location.pathname) @@ -113,7 +113,7 @@ const Account = () => { } return ( diff --git a/packages/template-retail-react-app/app/pages/account/index.test.js b/packages/template-retail-react-app/app/pages/account/index.test.js index 23135ec1b7..e9159483d9 100644 --- a/packages/template-retail-react-app/app/pages/account/index.test.js +++ b/packages/template-retail-react-app/app/pages/account/index.test.js @@ -6,8 +6,7 @@ */ import React from 'react' import {Route, Switch} from 'react-router-dom' -import {screen, waitFor, within, act} from '@testing-library/react' -import user from '@testing-library/user-event' +import {screen, waitFor, within} from '@testing-library/react' import {rest} from 'msw' import {renderWithProviders, createPathWithDefaults} from 'retail-react-app/app/utils/test-utils' import { @@ -89,23 +88,23 @@ test('Provides navigation for subpages', async () => { return res(ctx.delay(0), ctx.json(mockOrderHistory)) }) ) - await renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) expect(await screen.findByTestId('account-page')).toBeInTheDocument() const nav = within(screen.getByTestId('account-detail-nav')) - user.click(nav.getByText('Addresses')) + await user.click(nav.getByText('Addresses')) await waitFor(() => expect(window.location.pathname).toBe(`${expectedBasePath}/account/addresses`) ) - user.click(nav.getByText('Order History')) + await user.click(nav.getByText('Order History')) await waitFor(() => expect(window.location.pathname).toBe(`${expectedBasePath}/account/orders`)) }) describe('Render and logs out', function () { test('Renders account detail page by default for logged-in customer, and can log out', async () => { - renderWithProviders() + const {user} = renderWithProviders() // Render user profile page await waitFor(() => { @@ -116,9 +115,9 @@ describe('Render and logs out', function () { expect(screen.getByText('(727) 555-1234')).toBeInTheDocument() }) - user.click(screen.getAllByText(/Log Out/)[0]) + await user.click(screen.getAllByText(/Log Out/)[0]) await waitFor(() => { - expect(window.location.pathname).toBe(`${expectedBasePath}/login`) + expect(screen.getByTestId('login-page')).toBeInTheDocument() }) }) }) @@ -138,7 +137,7 @@ describe('updating profile', function () { ) }) test('Allows customer to edit profile details', async () => { - renderWithProviders() + const {user} = renderWithProviders() expect(await screen.findByTestId('account-page')).toBeInTheDocument() expect(await screen.findByTestId('account-detail-page')).toBeInTheDocument() await waitFor(() => { @@ -147,15 +146,13 @@ describe('updating profile', function () { }) const el = within(screen.getByTestId('sf-toggle-card-my-profile')) - await act(async () => { - user.click(el.getByText(/edit/i)) - }) - user.type(el.getByLabelText(/first name/i), 'Geordi') - user.type(el.getByLabelText(/Phone Number/i), '5671235585') + await user.click(el.getByText(/edit/i)) + + await user.type(el.getByLabelText(/first name/i), 'Geordi') + await user.type(el.getByLabelText(/Phone Number/i), '5671235585') + + await user.click(el.getByText(/save/i)) - await act(async () => { - user.click(el.getByText(/save/i)) - }) expect(await screen.findByText('Geordi Tester')).toBeInTheDocument() expect(await screen.findByText('(567) 123-5585')).toBeInTheDocument() }) @@ -170,19 +167,19 @@ describe('updating password', function () { ) }) test('Allows customer to update password', async () => { - renderWithProviders() + const {user} = renderWithProviders() expect(await screen.findByTestId('account-page')).toBeInTheDocument() expect(await screen.findByTestId('account-detail-page')).toBeInTheDocument() const el = within(screen.getByTestId('sf-toggle-card-password')) - user.click(el.getByText(/edit/i)) - user.type(el.getByLabelText(/current password/i), 'Password!12345') - user.type(el.getByLabelText(/new password/i), 'Password!98765') - user.click(el.getByText(/Forgot password/i)) + await user.click(el.getByText(/edit/i)) + await user.type(el.getByLabelText(/current password/i), 'Password!12345') + await user.type(el.getByLabelText(/new password/i), 'Password!98765') + await user.click(el.getByText(/Forgot password/i)) expect(await screen.findByTestId('account-detail-page')).toBeInTheDocument() - user.click(el.getByText(/save/i)) + await user.click(el.getByText(/save/i)) expect(await screen.findByText('••••••••')).toBeInTheDocument() }) }) diff --git a/packages/template-retail-react-app/app/pages/account/order-history.jsx b/packages/template-retail-react-app/app/pages/account/order-history.jsx index 9766058de3..784b34e539 100644 --- a/packages/template-retail-react-app/app/pages/account/order-history.jsx +++ b/packages/template-retail-react-app/app/pages/account/order-history.jsx @@ -92,7 +92,7 @@ const AccountOrderHistory = () => { { parameters: {customerId, limit, offset} }, - {enabled: onClient} + {enabled: onClient && !!customerId} ) const hasOrders = orders?.length > 0 diff --git a/packages/template-retail-react-app/app/pages/account/orders.test.js b/packages/template-retail-react-app/app/pages/account/orders.test.js index 7c509d195d..52ffcd5601 100644 --- a/packages/template-retail-react-app/app/pages/account/orders.test.js +++ b/packages/template-retail-react-app/app/pages/account/orders.test.js @@ -7,7 +7,6 @@ import React from 'react' import {Route, Switch} from 'react-router-dom' import {screen} from '@testing-library/react' -import user from '@testing-library/user-event' import {rest} from 'msw' import {renderWithProviders, createPathWithDefaults} from 'retail-react-app/app/utils/test-utils' import { @@ -55,7 +54,7 @@ test('Renders order history and details', async () => { return res(ctx.delay(0), ctx.json(mockOrderProducts)) }) ) - await renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) expect(await screen.findByTestId('account-order-history-page')).toBeInTheDocument() @@ -68,7 +67,7 @@ test('Renders order history and details', async () => { ) ).toHaveLength(3) - user.click((await screen.findAllByText(/view details/i))[0]) + await user.click((await screen.findAllByText(/view details/i))[0]) expect(await screen.findByTestId('account-order-details-page')).toBeInTheDocument() expect(await screen.findByText(/order number: 00028011/i)).toBeInTheDocument() expect( diff --git a/packages/template-retail-react-app/app/pages/account/profile.jsx b/packages/template-retail-react-app/app/pages/account/profile.jsx index 867e38815d..8de9b4d367 100644 --- a/packages/template-retail-react-app/app/pages/account/profile.jsx +++ b/packages/template-retail-react-app/app/pages/account/profile.jsx @@ -142,11 +142,11 @@ const ProfileCard = () => { - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} @@ -292,11 +292,11 @@ const PasswordCard = () => { - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} diff --git a/packages/template-retail-react-app/app/pages/account/wishlist/index.test.js b/packages/template-retail-react-app/app/pages/account/wishlist/index.test.js index d1e871f31e..1c41323292 100644 --- a/packages/template-retail-react-app/app/pages/account/wishlist/index.test.js +++ b/packages/template-retail-react-app/app/pages/account/wishlist/index.test.js @@ -15,25 +15,6 @@ import { mockedWishListProducts } from 'retail-react-app/app/pages/account/wishlist/index.mock' -jest.mock('commerce-sdk-react-preview', () => { - const originalModule = jest.requireActual('commerce-sdk-react-preview') - return { - ...originalModule, - useCustomerBaskets: jest.fn().mockReturnValue({data: {baskets: [{currency: 'GBP'}]}}) - } -}) - -jest.mock('../../../hooks/use-current-customer', () => { - return { - useCurrentCustomer: jest.fn().mockReturnValue({ - data: { - customerId: 'some_id', - isRegistered: true - } - }) - } -}) - beforeEach(() => { jest.resetModules() diff --git a/packages/template-retail-react-app/app/pages/account/wishlist/partials/wishlist-primary-action.test.js b/packages/template-retail-react-app/app/pages/account/wishlist/partials/wishlist-primary-action.test.js index 65b8bd79e2..dca0b83692 100644 --- a/packages/template-retail-react-app/app/pages/account/wishlist/partials/wishlist-primary-action.test.js +++ b/packages/template-retail-react-app/app/pages/account/wishlist/partials/wishlist-primary-action.test.js @@ -9,7 +9,6 @@ import {mockWishListDetails} from 'retail-react-app/app/pages/account/wishlist/p import ItemVariantProvider from 'retail-react-app/app/components/item-variant' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' import WishlistPrimaryAction from 'retail-react-app/app/pages/account/wishlist/partials/wishlist-primary-action' -import userEvent from '@testing-library/user-event' import {screen, waitFor} from '@testing-library/react' import PropTypes from 'prop-types' import {rest} from 'msw' @@ -50,29 +49,27 @@ beforeEach(() => { test('the Add To Cart button', async () => { const variant = mockWishListDetails.data[3] - renderWithProviders() + const {user} = renderWithProviders() const addToCartButton = await screen.findByRole('button', { name: /add to cart/i }) - userEvent.click(addToCartButton) + await user.click(addToCartButton) await waitFor(() => { - // Chakra UI renders multiple elements with toast title in DOM for accessibility. - // We need to assert the actual text within the alert - expect(screen.getAllByRole('alert')[0]).toHaveTextContent(/1 item added to cart/i) + expect(screen.getByText(/1 item added to cart/i)).toBeInTheDocument() }) }) test('the Add Set To Cart button', async () => { const productSetWithoutVariants = mockWishListDetails.data[1] - renderWithProviders() + const {user} = renderWithProviders() const button = await screen.findByRole('button', {name: /add set to cart/i}) - userEvent.click(button) + await user.click(button) await waitFor(() => { - expect(screen.getAllByRole('alert')[0]).toHaveTextContent(/2 items added to cart/i) + expect(screen.getByText(/2 items added to cart/i)).toBeInTheDocument() }) }) @@ -86,10 +83,10 @@ test('the View Full Details button', async () => { test('the View Options button', async () => { const masterProduct = mockWishListDetails.data[2] - renderWithProviders() + const {user} = renderWithProviders() const button = await screen.findByRole('button', {name: /view options/i}) - userEvent.click(button) + await user.click(button) await waitFor( () => { diff --git a/packages/template-retail-react-app/app/pages/cart/index.jsx b/packages/template-retail-react-app/app/pages/cart/index.jsx index 6c7de2e09c..2935ae58a4 100644 --- a/packages/template-retail-react-app/app/pages/cart/index.jsx +++ b/packages/template-retail-react-app/app/pages/cart/index.jsx @@ -30,6 +30,7 @@ import {useWishList} from 'retail-react-app/app/hooks/use-wish-list' // Constants import { API_ERROR_MESSAGE, + EINSTEIN_RECOMMENDERS, TOAST_ACTION_VIEW_WISHLIST, TOAST_MESSAGE_ADDED_TO_WISHLIST, TOAST_MESSAGE_REMOVED_ITEM_FROM_CART @@ -424,7 +425,7 @@ const Cart = () => { id="cart.recommended_products.title.recently_viewed" /> } - recommender={'viewed-recently-einstein'} + recommender={EINSTEIN_RECOMMENDERS.CART_RECENTLY_VIEWED} mx={{base: -4, sm: -6, lg: 0}} /> @@ -435,7 +436,7 @@ const Cart = () => { id="cart.recommended_products.title.may_also_like" /> } - recommender={'product-to-product-einstein'} + recommender={EINSTEIN_RECOMMENDERS.CART_MAY_ALSO_LIKE} products={basket?.productItems} shouldFetch={() => basket?.basketId && basket.productItems?.length > 0 diff --git a/packages/template-retail-react-app/app/pages/cart/index.test.js b/packages/template-retail-react-app/app/pages/cart/index.test.js index 39d27622c2..24de75477a 100644 --- a/packages/template-retail-react-app/app/pages/cart/index.test.js +++ b/packages/template-retail-react-app/app/pages/cart/index.test.js @@ -9,7 +9,6 @@ import React from 'react' import {screen, within, fireEvent, waitFor, act} from '@testing-library/react' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' import Cart from 'retail-react-app/app/pages/cart/index' -import userEvent from '@testing-library/user-event' import { mockShippingMethods, mockCustomerBaskets, @@ -247,7 +246,7 @@ describe.skip('Update quantity in product view', function () { }) test('Can update item quantity from product view modal', async () => { - renderWithProviders() + const {user} = renderWithProviders() expect(await screen.findByTestId('sf-cart-container')).toBeInTheDocument() expect(screen.getByText(/Belted Cardigan With Studs/i)).toBeInTheDocument() @@ -256,23 +255,19 @@ describe.skip('Update quantity in product view', function () { ) const editCartButton = within(cartItem).getByRole('button', {name: 'Edit'}) - await act(async () => { - userEvent.click(editCartButton) - }) + await user.click(editCartButton) const productView = screen.queryByTestId('product-view') - await act(async () => { - const incrementButton = await within(productView).findByTestId('quantity-increment') - // update item quantity - fireEvent.pointerDown(incrementButton) - // TODO: Fix assertion - // eslint-disable-next-line jest/valid-expect - expect(within(productView).getByDisplayValue('3')) + const incrementButton = await within(productView).findByTestId('quantity-increment') + // update item quantity + fireEvent.pointerDown(incrementButton) + // TODO: Fix assertion + // eslint-disable-next-line jest/valid-expect + expect(within(productView).getByDisplayValue('3')) - const updateCartButtons = within(productView).getAllByRole('button', {name: 'Update'}) - userEvent.click(updateCartButtons[0]) - }) + const updateCartButtons = within(productView).getAllByRole('button', {name: 'Update'}) + await user.click(updateCartButtons[0]) await waitFor(() => { expect(productView).not.toBeInTheDocument() }) @@ -300,7 +295,7 @@ describe('Remove item from cart', function () { // TODO: Fix flaky/broken test // eslint-disable-next-line jest/no-disabled-tests test.skip('Can remove item from the cart', async () => { - renderWithProviders() + const {user} = renderWithProviders() let cartItem await waitFor(() => { @@ -311,10 +306,10 @@ describe('Remove item from cart', function () { expect(cartItem).toBeInTheDocument() }) - userEvent.click(within(cartItem).getByText(/remove/i)) + await user.click(within(cartItem).getByText(/remove/i)) try { - userEvent.click(screen.getByText(/yes, remove item/i)) + await user.click(screen.getByText(/yes, remove item/i)) } catch { // On CI this remove-item button sometimes does not exist yet. // But if we then call `await screen.findByText(/yes, remove item/i)` at this point, @@ -456,13 +451,13 @@ describe('Coupons tests', function () { ) }) test('Can apply and remove product-level coupon code with promotion', async () => { - renderWithProviders() + const {user} = renderWithProviders() expect(await screen.findByTestId('sf-cart-container')).toBeInTheDocument() // add coupon - userEvent.click(screen.getByText('Do you have a promo code?')) - userEvent.type(screen.getByLabelText('Promo Code'), 'MENSSUITS') - userEvent.click(screen.getByText('Apply')) + await user.click(screen.getByText('Do you have a promo code?')) + await user.type(screen.getByLabelText('Promo Code'), 'MENSSUITS') + await user.click(screen.getByText('Apply')) expect(await screen.findByText('Promotion applied')).toBeInTheDocument() @@ -473,7 +468,7 @@ describe('Coupons tests', function () { expect(within(cartItem).queryByText(/^-([A-Z]{2})?\$19\.20$/)).toBeInTheDocument() const orderSummary = screen.getByTestId('sf-order-summary') - userEvent.click(within(orderSummary).getByText('Remove')) + await user.click(within(orderSummary).getByText('Remove')) expect(await screen.findByText('Promotion removed')).toBeInTheDocument() await waitFor(async () => { diff --git a/packages/template-retail-react-app/app/pages/cart/partials/cart-secondary-button-group.test.js b/packages/template-retail-react-app/app/pages/cart/partials/cart-secondary-button-group.test.js index 5cbdbdbbd5..989c069347 100644 --- a/packages/template-retail-react-app/app/pages/cart/partials/cart-secondary-button-group.test.js +++ b/packages/template-retail-react-app/app/pages/cart/partials/cart-secondary-button-group.test.js @@ -11,7 +11,6 @@ import ItemVariantProvider from 'retail-react-app/app/components/item-variant' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' import CartSecondaryButtonGroup from 'retail-react-app/app/pages/cart/partials/cart-secondary-button-group' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' import {noop} from 'retail-react-app/app/utils/utils' const MockedComponent = ({ @@ -42,12 +41,12 @@ beforeEach(() => { }) test('renders secondary action component', async () => { - renderWithProviders() + const {user} = renderWithProviders() const removeButton = screen.getByRole('button', { name: /remove/i }) expect(removeButton).toBeInTheDocument() - user.click(removeButton) + await user.click(removeButton) const confirmButton = screen.getByRole('button', {name: /yes, remove item/i}) await waitFor(() => { @@ -62,7 +61,7 @@ test('renders secondary with event handlers', async () => { const onEditClick = jest.fn() const onAddToWishlistClick = jest.fn() - renderWithProviders( + const {user} = renderWithProviders( { }) expect(editButton).toBeInTheDocument() - user.click(editButton) + await user.click(editButton) expect(onEditClick).toHaveBeenCalledTimes(1) const addToWishlistButton = screen.getByRole('button', { name: /Add to wishlist/i }) - user.click(addToWishlistButton) + await user.click(addToWishlistButton) expect(onAddToWishlistClick).toHaveBeenCalledTimes(1) const removeButton = screen.getByRole('button', { @@ -90,7 +89,7 @@ test('renders secondary with event handlers', async () => { expect(removeButton).toBeInTheDocument() - user.click(removeButton) + await user.click(removeButton) const confirmButton = screen.getByRole('button', {name: /yes, remove item/i}) await waitFor(() => { @@ -98,7 +97,7 @@ test('renders secondary with event handlers', async () => { // We need to assert the actual text within the alert expect(confirmButton).toBeInTheDocument() }) - user.click(confirmButton) + await user.click(confirmButton) expect(onRemoveItemClick).toHaveBeenCalledTimes(1) }) diff --git a/packages/template-retail-react-app/app/pages/checkout/confirmation.jsx b/packages/template-retail-react-app/app/pages/checkout/confirmation.jsx index 118e96c0d5..6399ba0a69 100644 --- a/packages/template-retail-react-app/app/pages/checkout/confirmation.jsx +++ b/packages/template-retail-react-app/app/pages/checkout/confirmation.jsx @@ -190,10 +190,10 @@ const CheckoutConfirmation = () => { - {form.errors?.global && ( + {form.formState.errors?.global && ( - {form.errors.global.message} + {form.formState.errors.global.message} )} diff --git a/packages/template-retail-react-app/app/pages/checkout/confirmation.test.js b/packages/template-retail-react-app/app/pages/checkout/confirmation.test.js index 9ce9e4682c..bfaa9695e1 100644 --- a/packages/template-retail-react-app/app/pages/checkout/confirmation.test.js +++ b/packages/template-retail-react-app/app/pages/checkout/confirmation.test.js @@ -7,7 +7,6 @@ import React from 'react' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' import {Route, Switch} from 'react-router-dom' import {rest} from 'msw' import {renderWithProviders, createPathWithDefaults} from 'retail-react-app/app/utils/test-utils' @@ -74,14 +73,14 @@ test('Create Account form - renders error message', async () => { }) ) - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {isGuest: true} }) const createAccountButton = await screen.findByRole('button', {name: /create account/i}) const passwordEl = await screen.findByLabelText('Password') - user.type(passwordEl, 'P4ssword!') - user.click(createAccountButton) + await user.type(passwordEl, 'P4ssword!') + await user.click(createAccountButton) const alert = await screen.findByRole('alert') expect(alert).toBeInTheDocument() }) @@ -93,15 +92,15 @@ test('Create Account form - successful submission results in redirect to the Acc }) ) - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {isGuest: true} }) const createAccountButton = await screen.findByRole('button', {name: /create account/i}) const password = screen.getByLabelText('Password') - user.type(password, 'P4ssword!') - user.click(createAccountButton) + await user.type(password, 'P4ssword!') + await user.click(createAccountButton) await waitFor(() => { expect(window.location.pathname).toBe('/uk/en-GB/account') diff --git a/packages/template-retail-react-app/app/pages/checkout/index.test.js b/packages/template-retail-react-app/app/pages/checkout/index.test.js index 713f9534ce..5c88f368c4 100644 --- a/packages/template-retail-react-app/app/pages/checkout/index.test.js +++ b/packages/template-retail-react-app/app/pages/checkout/index.test.js @@ -8,7 +8,6 @@ import React from 'react' import Checkout from 'retail-react-app/app/pages/checkout/index' import {Route, Switch} from 'react-router-dom' import {screen, waitFor, within} from '@testing-library/react' -import user from '@testing-library/user-event' import {rest} from 'msw' import { renderWithProviders, @@ -22,6 +21,7 @@ import { mockedCustomerProductLists } from 'retail-react-app/app/mocks/mock-data' import mockConfig from 'retail-react-app/config/mocks/default' +import userEvent from '@testing-library/user-event' jest.setTimeout(30000) @@ -185,7 +185,7 @@ test('Can proceed through checkout steps as guest', async () => { // Set the initial browser router path and render our component tree. window.history.pushState({}, 'Checkout', createPathWithDefaults('/checkout')) - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {isGuest: true, siteAlias: 'uk', appConfig: mockConfig.app} }) @@ -193,14 +193,14 @@ test('Can proceed through checkout steps as guest', async () => { await screen.findByText(/checkout as guest/i) // Verify cart products display - user.click(screen.getByText(/2 items in cart/i)) + await user.click(screen.getByText(/2 items in cart/i)) expect(await screen.findByText(/Long Sleeve Crew Neck/i)).toBeInTheDocument() // Provide customer email and submit const emailInput = screen.getByLabelText(/email/i) const submitBtn = screen.getByText(/checkout as guest/i) - user.type(emailInput, 'test@test.com') - user.click(submitBtn) + await user.type(emailInput, 'test@test.com') + await user.click(submitBtn) // Wait for next step to render await waitFor(() => @@ -211,14 +211,14 @@ test('Can proceed through checkout steps as guest', async () => { expect(screen.getByText('test@test.com')).toBeInTheDocument() // Fill out shipping address form and submit - user.type(screen.getByLabelText(/first name/i), 'Tester') - user.type(screen.getByLabelText(/last name/i), 'McTesting') - user.type(screen.getByLabelText(/phone/i), '(727) 555-1234') - user.type(screen.getByLabelText(/address/i), '123 Main St') - user.type(screen.getByLabelText(/city/i), 'Tampa') - user.selectOptions(screen.getByLabelText(/state/i), ['FL']) - user.type(screen.getByLabelText(/zip code/i), '33610') - user.click(screen.getByText(/continue to shipping method/i)) + await user.type(screen.getByLabelText(/first name/i), 'Tester') + await user.type(screen.getByLabelText(/last name/i), 'McTesting') + await user.type(screen.getByLabelText(/phone/i), '(727) 555-1234') + await user.type(screen.getByLabelText(/address/i), '123 Main St') + await user.type(screen.getByLabelText(/city/i), 'Tampa') + await user.selectOptions(screen.getByLabelText(/state/i), ['FL']) + await user.type(screen.getByLabelText(/zip code/i), '33610') + await user.click(screen.getByText(/continue to shipping method/i)) // Wait for next step to render await waitFor(() => { @@ -233,6 +233,7 @@ test('Can proceed through checkout steps as guest', async () => { // Default shipping option should be selected const shippingOptionsForm = screen.getByTestId('sf-checkout-shipping-options-form') + await waitFor(() => expect(shippingOptionsForm).toHaveFormValues({ 'shipping-options-radiogroup': mockShippingMethods.defaultShippingMethodId @@ -240,7 +241,7 @@ test('Can proceed through checkout steps as guest', async () => { ) // Submit selected shipping method - user.click(screen.getByText(/continue to payment/i)) + await user.click(screen.getByText(/continue to payment/i)) // Wait for next step to render await waitFor(() => { @@ -251,10 +252,10 @@ test('Can proceed through checkout steps as guest', async () => { expect(screen.getByText(defaultShippingMethod.name)).toBeInTheDocument() // Fill out credit card payment form - user.type(screen.getByLabelText(/card number/i), '4111111111111111') - user.type(screen.getByLabelText(/name on card/i), 'Testy McTester') - user.type(screen.getByLabelText(/expiration date/i), '1224') - user.type(screen.getByLabelText(/security code/i), '123') + await user.type(screen.getByLabelText(/card number/i), '4111111111111111') + await user.type(screen.getByLabelText(/name on card/i), 'Testy McTester') + await user.type(screen.getByLabelText(/expiration date/i), '1224') + await user.type(screen.getByLabelText(/security code/i), '123') // Same as shipping checkbox selected by default expect(screen.getByLabelText(/same as shipping address/i)).toBeChecked() @@ -267,7 +268,7 @@ test('Can proceed through checkout steps as guest', async () => { expect(step3Content.getByText('US')).toBeInTheDocument() // Move to final review step - user.click(screen.getByText(/review order/i)) + await user.click(screen.getByText(/review order/i)) const placeOrderBtn = await screen.findByTestId('sf-checkout-place-order-btn', undefined, { timeout: 5000 @@ -283,21 +284,22 @@ test('Can proceed through checkout steps as guest', async () => { expect(step3Content.getByText('Tampa, FL 33610')).toBeInTheDocument() expect(step3Content.getByText('US')).toBeInTheDocument() // Place the order - user.click(placeOrderBtn) + await user.click(placeOrderBtn) // Should now be on our mocked confirmation route/page expect(await screen.findByText(/success/i)).toBeInTheDocument() }) test('Can proceed through checkout as registered customer', async () => { + const user = userEvent.setup() await logInDuringCheckout() // Email should be displayed in previous step summary expect(screen.getByText('customer@test.com')).toBeInTheDocument() // Select a saved address and continue - user.click(screen.getByDisplayValue('savedaddress1')) - user.click(screen.getByText(/continue to shipping method/i)) + await user.click(screen.getByDisplayValue('savedaddress1')) + await user.click(screen.getByText(/continue to shipping method/i)) // Wait for next step to render await waitFor(() => { @@ -317,7 +319,7 @@ test('Can proceed through checkout as registered customer', async () => { ) // Submit selected shipping method - user.click(screen.getByText(/continue to payment/i)) + await user.click(screen.getByText(/continue to payment/i)) // Wait for next step to render await waitFor(() => { @@ -329,10 +331,10 @@ test('Can proceed through checkout as registered customer', async () => { // Fill out credit card payment form // (we no longer have saved payment methods) - user.type(screen.getByLabelText(/card number/i), '4111111111111111') - user.type(screen.getByLabelText(/name on card/i), 'Testy McTester') - user.type(screen.getByLabelText(/expiration date/i), '1224') - user.type(screen.getByLabelText(/security code/i), '123') + await user.type(screen.getByLabelText(/card number/i), '4111111111111111') + await user.type(screen.getByLabelText(/name on card/i), 'Testy McTester') + await user.type(screen.getByLabelText(/expiration date/i), '1224') + await user.type(screen.getByLabelText(/security code/i), '123') // Same as shipping checkbox selected by default expect(screen.getByLabelText(/same as shipping address/i)).toBeChecked() @@ -342,7 +344,7 @@ test('Can proceed through checkout as registered customer', async () => { expect(step3Content.getByText('123 Main St')).toBeInTheDocument() // Move to final review step - user.click(screen.getByText(/review order/i)) + await user.click(screen.getByText(/review order/i)) const placeOrderBtn = await screen.findByTestId('sf-checkout-place-order-btn', undefined, { timeout: 5000 @@ -356,17 +358,19 @@ test('Can proceed through checkout as registered customer', async () => { expect(step3Content.getByText('123 Main St')).toBeInTheDocument() // Place the order - user.click(placeOrderBtn) + await user.click(placeOrderBtn) // Should now be on our mocked confirmation route/page expect(await screen.findByText(/success/i)).toBeInTheDocument() }) test('Can edit address during checkout as a registered customer', async () => { + const user = userEvent.setup() + await logInDuringCheckout() const firstAddress = screen.getByTestId('sf-checkout-shipping-address-0') - user.click(within(firstAddress).getByText(/edit/i)) + await user.click(within(firstAddress).getByText(/edit/i)) // Wait for the edit address form to render await waitFor(() => @@ -376,9 +380,9 @@ test('Can edit address during checkout as a registered customer', async () => { expect(screen.getByLabelText(/first name/i)).toBeInTheDocument() // Edit and save the address - user.clear(screen.getByLabelText('Address')) - user.type(screen.getByLabelText('Address'), '369 Main Street') - user.click(screen.getByText(/save & continue to shipping method/i)) + await user.clear(screen.getByLabelText('Address')) + await user.type(screen.getByLabelText('Address'), '369 Main Street') + await user.click(screen.getByText(/save & continue to shipping method/i)) // Wait for next step to render await waitFor(() => { @@ -389,6 +393,7 @@ test('Can edit address during checkout as a registered customer', async () => { }) test('Can add address during checkout as a registered customer', async () => { + const user = userEvent.setup() await logInDuringCheckout() global.server.use( @@ -398,19 +403,19 @@ test('Can add address during checkout as a registered customer', async () => { ) // Add address - user.click(screen.getByText(/add new address/i)) + await user.click(screen.getByText(/add new address/i)) const firstName = await screen.findByLabelText(/first name/i) - user.type(firstName, 'Test2') - user.type(screen.getByLabelText(/last name/i), 'McTester') - user.type(screen.getByLabelText(/phone/i), '7275551234') - user.selectOptions(screen.getByLabelText(/country/i), ['US']) - user.type(screen.getByLabelText(/address/i), 'Tropicana Field') - user.type(screen.getByLabelText(/city/i), 'Tampa') - user.selectOptions(screen.getByLabelText(/state/i), ['FL']) - user.type(screen.getByLabelText(/zip code/i), '33712') + await user.type(firstName, 'Test2') + await user.type(screen.getByLabelText(/last name/i), 'McTester') + await user.type(screen.getByLabelText(/phone/i), '7275551234') + await user.selectOptions(screen.getByLabelText(/country/i), ['US']) + await user.type(screen.getByLabelText(/address/i), 'Tropicana Field') + await user.type(screen.getByLabelText(/city/i), 'Tampa') + await user.selectOptions(screen.getByLabelText(/state/i), ['FL']) + await user.type(screen.getByLabelText(/zip code/i), '33712') - user.click(screen.getByText(/save & continue to shipping method/i)) + await user.click(screen.getByText(/save & continue to shipping method/i)) // Wait for next step to render await waitFor(() => { @@ -529,7 +534,7 @@ const logInDuringCheckout = async () => { // Set the initial browser router path and render our component tree. window.history.pushState({}, 'Checkout', createPathWithDefaults('/checkout')) - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { // Not bypassing auth as usual, so we can test the guest-to-registered flow bypassAuth: false, @@ -541,7 +546,7 @@ const logInDuringCheckout = async () => { // Switch to login const haveAccountButton = await screen.findByText(/already have an account/i) - user.click(haveAccountButton) + await user.click(haveAccountButton) // Wait for checkout to load and display first step const loginBtn = await screen.findByText(/log in/i) @@ -566,9 +571,9 @@ const logInDuringCheckout = async () => { // Provide customer email and submit const emailInput = screen.getByLabelText('Email') const pwInput = screen.getByLabelText('Password') - user.type(emailInput, 'customer@test.com') - user.type(pwInput, 'Password!1') - user.click(loginBtn) + await user.type(emailInput, 'customer@test.com') + await user.type(pwInput, 'Password!1') + await user.click(loginBtn) // Wait for next step to render await waitFor(() => diff --git a/packages/template-retail-react-app/app/pages/checkout/partials/cc-radio-group.jsx b/packages/template-retail-react-app/app/pages/checkout/partials/cc-radio-group.jsx index a020bc7bf4..c0aca02256 100644 --- a/packages/template-retail-react-app/app/pages/checkout/partials/cc-radio-group.jsx +++ b/packages/template-retail-react-app/app/pages/checkout/partials/cc-radio-group.jsx @@ -25,12 +25,12 @@ const CCRadioGroup = ({ return ( - {form.errors.paymentInstrumentId && ( + {form.formState.errors.paymentInstrumentId && ( - {form.errors.paymentInstrumentId.message} + {form.formState.errors.paymentInstrumentId.message} )} diff --git a/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.jsx b/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.jsx index 25a795c32d..6c75c448b9 100644 --- a/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.jsx +++ b/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.jsx @@ -21,7 +21,6 @@ import { Stack, Text } from '@chakra-ui/react' -import {useHistory} from 'react-router-dom' import {useForm} from 'react-hook-form' import {FormattedMessage, useIntl} from 'react-intl' import {useCheckout} from 'retail-react-app/app/pages/checkout/util/checkout-context' @@ -33,14 +32,15 @@ import { } from 'retail-react-app/app/components/toggle-card' import Field from 'retail-react-app/app/components/field' import {AuthModal, useAuthModal} from 'retail-react-app/app/hooks/use-auth-modal' +import useNavigation from 'retail-react-app/app/hooks/use-navigation' import {useCurrentCustomer} from 'retail-react-app/app/hooks/use-current-customer' import {useCurrentBasket} from 'retail-react-app/app/hooks/use-current-basket' import {AuthHelpers, useAuthHelper, useShopperBasketsMutation} from 'commerce-sdk-react-preview' const ContactInfo = () => { const {formatMessage} = useIntl() - const history = useHistory() const authModal = useAuthModal('password') + const navigate = useNavigation() const {data: customer} = useCurrentCustomer() const {data: basket} = useCurrentBasket() const login = useAuthHelper(AuthHelpers.LoginRegisteredUserB2C) @@ -191,7 +191,7 @@ const ContactInfo = () => { onClose={() => setSignOutConfirmDialogIsOpen(false)} onConfirm={async () => { await logout.mutateAsync() - history.replace('/') + navigate('/login') setSignOutConfirmDialogIsOpen(false) }} /> diff --git a/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.test.js b/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.test.js index 98e7b3a67c..55b3a7ced0 100644 --- a/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.test.js +++ b/packages/template-retail-react-app/app/pages/checkout/partials/contact-info.test.js @@ -6,8 +6,6 @@ */ import React from 'react' import {screen, within} from '@testing-library/react' -import user from '@testing-library/user-event' - import ContactInfo from 'retail-react-app/app/pages/checkout/partials/contact-info' import {renderWithProviders} from 'retail-react-app/app/utils/test-utils' @@ -27,17 +25,17 @@ jest.mock('../util/checkout-context', () => { } }) -test('renders component', () => { - renderWithProviders() +test('renders component', async () => { + const {user} = renderWithProviders() // switch to login const trigger = screen.getByText(/Already have an account\? Log in/i) - user.click(trigger) + await user.click(trigger) // open forgot password modal const withinCard = within(screen.getByTestId('sf-toggle-card-step-0')) const openModal = withinCard.getByText(/Forgot password\?/i) - user.click(openModal) + await user.click(openModal) // check that forgot password modal is open const withinForm = within(screen.getByTestId('sf-auth-modal-form')) diff --git a/packages/template-retail-react-app/app/pages/checkout/partials/shipping-address-selection.jsx b/packages/template-retail-react-app/app/pages/checkout/partials/shipping-address-selection.jsx index 50eb27a838..d872a93e21 100644 --- a/packages/template-retail-react-app/app/pages/checkout/partials/shipping-address-selection.jsx +++ b/packages/template-retail-react-app/app/pages/checkout/partials/shipping-address-selection.jsx @@ -233,7 +233,7 @@ const ShippingAddressSelection = ({ defaultValue="" control={form.control} rules={{required: !isEditingAddress}} - render={({value}) => ( + render={({field: {value}}) => ( ( + render={({field: {value, onChange}}) => ( { + global.server.use( + rest.get('*/product-search', (req, res, ctx) => { + return res(ctx.delay(0), ctx.status(200), ctx.json(mockProductSearch)) + }) + ) const {getByTestId} = renderWithProviders() expect(getByTestId('home-page')).toBeInTheDocument() diff --git a/packages/template-retail-react-app/app/pages/login/index.jsx b/packages/template-retail-react-app/app/pages/login/index.jsx index be2787beca..3e6f440af4 100644 --- a/packages/template-retail-react-app/app/pages/login/index.jsx +++ b/packages/template-retail-react-app/app/pages/login/index.jsx @@ -91,7 +91,6 @@ const Login = () => { useEffect(() => { einstein.sendViewPage(location.pathname) }, []) - return ( diff --git a/packages/template-retail-react-app/app/pages/login/index.test.js b/packages/template-retail-react-app/app/pages/login/index.test.js index 9a357a446c..922e180bf8 100644 --- a/packages/template-retail-react-app/app/pages/login/index.test.js +++ b/packages/template-retail-react-app/app/pages/login/index.test.js @@ -6,7 +6,6 @@ */ import React from 'react' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' import {rest} from 'msw' import { renderWithProviders, @@ -99,7 +98,7 @@ describe('Logging in tests', function () { ) }) test('Allows customer to sign in to their account', async () => { - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { siteAlias: 'uk', locale: {id: 'en-GB'}, @@ -109,8 +108,8 @@ describe('Logging in tests', function () { }) // enter credentials and submit - user.type(screen.getByLabelText('Email'), 'customer@test.com') - user.type(screen.getByLabelText('Password'), 'Password!1') + await user.type(screen.getByLabelText('Email'), 'customer@test.com') + await user.type(screen.getByLabelText('Password'), 'Password!1') // login with credentials global.server.use( rest.post('*/oauth2/token', (req, res, ctx) => @@ -129,7 +128,7 @@ describe('Logging in tests', function () { ) ) - user.click(screen.getByText(/sign in/i)) + await user.click(screen.getByText(/sign in/i)) await waitFor(() => { expect(window.location.pathname).toBe('/uk/en-GB/account') expect(screen.getByText(/My Profile/i)).toBeInTheDocument() @@ -162,7 +161,7 @@ describe('Error while logging in', function () { // TODO: Fix flaky/broken test // eslint-disable-next-line jest/no-disabled-tests test.skip('Renders error when given incorrect log in credentials', async () => { - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { siteAlias: 'uk', locale: {id: 'en-GB'}, @@ -172,8 +171,8 @@ describe('Error while logging in', function () { }) // enter credentials and submit - user.type(screen.getByLabelText('Email'), 'foo@test.com') - user.type(screen.getByLabelText('Password'), 'SomeFakePassword1!') + await user.type(screen.getByLabelText('Email'), 'foo@test.com') + await user.type(screen.getByLabelText('Password'), 'SomeFakePassword1!') // mock failed auth request global.server.use( @@ -185,7 +184,7 @@ describe('Error while logging in', function () { }) ) - user.click(screen.getByText(/sign in/i)) + await user.click(screen.getByText(/sign in/i)) // wait for login error alert to appear expect( await screen.findByText(/Incorrect username or password, please try again./i) @@ -194,7 +193,7 @@ describe('Error while logging in', function () { }) describe('Navigate away from login page tests', function () { test('should navigate to sign up page when the user clicks Create Account', async () => { - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { siteAlias: 'uk', locale: {id: 'en-GB'}, @@ -202,7 +201,7 @@ describe('Navigate away from login page tests', function () { isGuest: true } }) - user.click(await screen.findByText(/Create Account/i)) + await user.click(await screen.findByText(/Create Account/i)) await waitFor(async () => { // wait for sign up page to appear @@ -210,7 +209,7 @@ describe('Navigate away from login page tests', function () { }) }) test('should navigate to reset password page when the user clicks Forgot Password', async () => { - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { siteAlias: 'uk', locale: {id: 'en-GB'}, @@ -218,7 +217,7 @@ describe('Navigate away from login page tests', function () { isGuest: true } }) - user.click(screen.getByText(/forgot password/i)) + await user.click(screen.getByText(/forgot password/i)) // wait for sign up page to appear expect( diff --git a/packages/template-retail-react-app/app/pages/product-detail/index.jsx b/packages/template-retail-react-app/app/pages/product-detail/index.jsx index 117a5d4a2d..5ae617e727 100644 --- a/packages/template-retail-react-app/app/pages/product-detail/index.jsx +++ b/packages/template-retail-react-app/app/pages/product-detail/index.jsx @@ -34,6 +34,7 @@ import InformationAccordion from 'retail-react-app/app/pages/product-detail/part // constant import { API_ERROR_MESSAGE, + EINSTEIN_RECOMMENDERS, MAX_CACHE_AGE, TOAST_ACTION_VIEW_WISHLIST, TOAST_MESSAGE_ADDED_TO_WISHLIST @@ -346,7 +347,7 @@ const ProductDetail = () => { id="product_detail.recommended_products.title.complete_set" /> } - recommender={'complete-the-set'} + recommender={EINSTEIN_RECOMMENDERS.PDP_COMPLETE_SET} products={[product]} mx={{base: -4, md: -8, lg: 0}} shouldFetch={() => product?.id} @@ -359,7 +360,7 @@ const ProductDetail = () => { id="product_detail.recommended_products.title.might_also_like" /> } - recommender={'pdp-similar-items'} + recommender={EINSTEIN_RECOMMENDERS.PDP_MIGHT_ALSO_LIKE} products={[product]} mx={{base: -4, md: -8, lg: 0}} shouldFetch={() => product?.id} @@ -372,7 +373,7 @@ const ProductDetail = () => { id="product_detail.recommended_products.title.recently_viewed" /> } - recommender={'viewed-recently-einstein'} + recommender={EINSTEIN_RECOMMENDERS.PDP_RECENTLY_VIEWED} mx={{base: -4, md: -8, lg: 0}} /> diff --git a/packages/template-retail-react-app/app/pages/product-detail/partials/information-accordion.jsx b/packages/template-retail-react-app/app/pages/product-detail/partials/information-accordion.jsx index 7d1316362b..512b970fac 100644 --- a/packages/template-retail-react-app/app/pages/product-detail/partials/information-accordion.jsx +++ b/packages/template-retail-react-app/app/pages/product-detail/partials/information-accordion.jsx @@ -23,7 +23,7 @@ const InformationAccordion = ({product}) => { return ( - + {/* Details */}

diff --git a/packages/template-retail-react-app/app/pages/product-list/index.test.js b/packages/template-retail-react-app/app/pages/product-list/index.test.js index 18d4b58a8f..b5e1a5ee97 100644 --- a/packages/template-retail-react-app/app/pages/product-list/index.test.js +++ b/packages/template-retail-react-app/app/pages/product-list/index.test.js @@ -13,7 +13,6 @@ import { mockedEmptyCustomerProductList } from 'retail-react-app/app/mocks/mock-data' import {screen, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' import {Route, Switch} from 'react-router-dom' import {createPathWithDefaults, renderWithProviders} from 'retail-react-app/app/utils/test-utils' import ProductList from '.' @@ -72,6 +71,9 @@ test('should render product list page', async () => { window.history.pushState({}, 'ProductList', '/uk/en-GB/category/mens-clothing-jackets') renderWithProviders() expect(await screen.findByTestId('sf-product-list-page')).toBeInTheDocument() + await waitFor(() => { + expect(screen.getByText(/Classic Glen Plaid Pant/i)).toBeInTheDocument() + }) }) test('should render sort option list page', async () => { @@ -109,24 +111,24 @@ test('should display Selected refinements as there are some in the response', as // eslint-disable-next-line jest/no-disabled-tests test.skip('show login modal when an unauthenticated user tries to add an item to wishlist', async () => { window.history.pushState({}, 'ProductList', '/uk/en-GB/category/mens-clothing-jackets') - renderWithProviders() + const {user} = renderWithProviders() expect(await screen.findAllByText('Black')).toBeInTheDocument() const wishlistButton = await screen.getAllByLabelText('Wishlist') expect(wishlistButton).toHaveLength(25) - user.click(wishlistButton[0]) + await user.click(wishlistButton[0]) expect(await screen.findByText(/Email/)).toBeInTheDocument() expect(await screen.findByText(/Password/)).toBeInTheDocument() }) test('clicking a filter will change url', async () => { window.history.pushState({}, 'ProductList', '/uk/en-GB/category/mens-clothing-jackets') - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', locale: {id: 'en-GB'}} }) // NOTE: Look for a better wait to wait an additional render. await waitFor(() => !!screen.getByText(/Beige/i)) - user.click(screen.getByText(/Beige/i)) + await user.click(screen.getByText(/Beige/i)) await waitFor(() => expect(window.location.search).toBe( '?limit=25&refine=c_refinementColor%3DBeige&sort=best-matches' @@ -140,11 +142,11 @@ test('click on Clear All should clear out all the filter in search params', asyn 'ProductList', '/uk/en-GB/category/mens-clothing-jackets?limit=25&refine=c_refinementColor%3DBeige&sort=best-matches' ) - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', locale: {id: 'en-GB'}} }) const clearAllButton = await screen.findAllByText(/Clear All/i) - user.click(clearAllButton[0]) + await user.click(clearAllButton[0]) await waitFor(() => expect(window.location.search).toBe('?limit=25&offset=0&sort=best-matches')) }) @@ -158,14 +160,14 @@ test('should display Search Results for when searching', async () => { test('clicking a filter on search result will change url', async () => { window.history.pushState({}, 'ProductList', '/uk/en-GB/search?q=dress') - renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', locale: {id: 'en-GB'}} }) // NOTE: Look for a better wait to wait an additional render. await waitFor(() => !!screen.getByText(/Beige/i)) - user.click(screen.getByText(/Beige/i)) + await user.click(screen.getByText(/Beige/i)) await waitFor(() => expect(window.location.search).toBe( diff --git a/packages/template-retail-react-app/app/pages/product-list/partials/empty-results.jsx b/packages/template-retail-react-app/app/pages/product-list/partials/empty-results.jsx index 3910d5f07f..bf2810499f 100644 --- a/packages/template-retail-react-app/app/pages/product-list/partials/empty-results.jsx +++ b/packages/template-retail-react-app/app/pages/product-list/partials/empty-results.jsx @@ -12,6 +12,7 @@ import {Link as RouteLink} from 'react-router-dom' import {defineMessage, FormattedMessage, useIntl} from 'react-intl' import {SearchIcon} from 'retail-react-app/app/components/icons' import RecommendedProducts from 'retail-react-app/app/components/recommended-products' +import {EINSTEIN_RECOMMENDERS} from 'retail-react-app/app/constants' const contactUsMessage = defineMessage({ id: 'empty_search_results.link.contact_us', @@ -88,7 +89,7 @@ const EmptySearchResults = ({searchQuery, category}) => { id="empty_search_results.recommended_products.title.top_sellers" /> } - recommender={'home-top-revenue-for-category'} + recommender={EINSTEIN_RECOMMENDERS.EMPTY_SEARCH_RESULTS_TOP_SELLERS} mx={{base: -4, md: -8, lg: 0}} /> @@ -99,18 +100,7 @@ const EmptySearchResults = ({searchQuery, category}) => { id="empty_search_results.recommended_products.title.most_viewed" /> } - recommender={'products-in-all-categories'} - mx={{base: -4, md: -8, lg: 0}} - /> - - - } - recommender={'products-in-all-categories'} + recommender={EINSTEIN_RECOMMENDERS.EMPTY_SEARCH_RESULTS_MOST_VIEWED} mx={{base: -4, md: -8, lg: 0}} /> diff --git a/packages/template-retail-react-app/app/pages/product-list/partials/page-header.jsx b/packages/template-retail-react-app/app/pages/product-list/partials/page-header.jsx index a2fec7d17d..3339066059 100644 --- a/packages/template-retail-react-app/app/pages/product-list/partials/page-header.jsx +++ b/packages/template-retail-react-app/app/pages/product-list/partials/page-header.jsx @@ -5,9 +5,8 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -import React, {Fragment} from 'react' +import React from 'react' import PropTypes from 'prop-types' -import {isServer} from 'retail-react-app/app/utils/utils' // Components import {Box, Heading, Flex, Text, Fade} from '@chakra-ui/react' @@ -26,12 +25,7 @@ const PageHeader = ({category, productSearchResult, isLoading, searchQuery, ...o {`${category?.name || searchQuery || ''}`} - {isServer ? ( - ({productSearchResult?.total}) - ) : ( - // Fade in the total when available. When it's changed or not available yet, do not render it - !isLoading && ({productSearchResult?.total}) - )} + {!isLoading && ({productSearchResult?.total})} diff --git a/packages/template-retail-react-app/app/pages/product-list/partials/refinements.jsx b/packages/template-retail-react-app/app/pages/product-list/partials/refinements.jsx index 5d89d818ba..a80054597d 100644 --- a/packages/template-retail-react-app/app/pages/product-list/partials/refinements.jsx +++ b/packages/template-retail-react-app/app/pages/product-list/partials/refinements.jsx @@ -70,7 +70,6 @@ const Refinements = ({filters, toggleFilter, selectedFilters, isLoading}) => { onChange={updateAccordionState} opacity={isLoading ? 0.2 : 1} allowMultiple={true} - allowToggle={true} defaultIndex={filtersIndexes} reduceMotion={true} > diff --git a/packages/template-retail-react-app/app/pages/registration/index.test.jsx b/packages/template-retail-react-app/app/pages/registration/index.test.jsx index 6edcacb09f..14a58e4e99 100644 --- a/packages/template-retail-react-app/app/pages/registration/index.test.jsx +++ b/packages/template-retail-react-app/app/pages/registration/index.test.jsx @@ -6,7 +6,6 @@ */ import React from 'react' import {screen, within, waitFor} from '@testing-library/react' -import user from '@testing-library/user-event' import { guestToken, registerUserToken, @@ -73,7 +72,7 @@ afterEach(() => { test('Allows customer to create an account', async () => { // render our test component - await renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: { siteAlias: 'uk', locale: {id: 'en-GB'}, @@ -88,10 +87,11 @@ test('Allows customer to create an account', async () => { // fill out form and submit const withinForm = within(form) - user.paste(withinForm.getByLabelText('First Name'), 'Tester') - user.paste(withinForm.getByLabelText('Last Name'), 'Tester') - user.paste(withinForm.getByPlaceholderText(/you@email.com/i), 'customer@test.com') - user.paste(withinForm.getAllByLabelText(/password/i)[0], 'Password!1') + await user.type(withinForm.getByLabelText('First Name'), 'Tester') + await user.type(withinForm.getByLabelText('Last Name'), 'Tester') + await user.type(withinForm.getByPlaceholderText(/you@email.com/i), 'customer@test.com') + await user.type(withinForm.getAllByLabelText(/password/i)[0], 'Password!1') + screen.logTestingPlaygroundURL() // login with credentials global.server.use( @@ -116,10 +116,11 @@ test('Allows customer to create an account', async () => { }) ) - user.click(withinForm.getByText(/create account/i)) + await user.click(withinForm.getByText(/create account/i)) // wait for success state to appear const myAccount = await screen.findAllByText(/My Account/) + await waitFor( () => { expect(myAccount).toHaveLength(2) diff --git a/packages/template-retail-react-app/app/pages/reset-password/index.test.jsx b/packages/template-retail-react-app/app/pages/reset-password/index.test.jsx index 13d8fb3775..c7bad5e3c0 100644 --- a/packages/template-retail-react-app/app/pages/reset-password/index.test.jsx +++ b/packages/template-retail-react-app/app/pages/reset-password/index.test.jsx @@ -6,7 +6,6 @@ */ import React from 'react' import {screen, waitFor, within} from '@testing-library/react' -import user from '@testing-library/user-event' import {rest} from 'msw' import {createPathWithDefaults, renderWithProviders} from 'retail-react-app/app/utils/test-utils' import ResetPassword from '.' @@ -63,11 +62,11 @@ afterEach(() => { test('Allows customer to go to sign in page', async () => { // render our test component - await renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) - user.click(await screen.findByText('Sign in')) + await user.click(await screen.findByText('Sign in')) await waitFor(() => { expect(window.location.pathname).toBe('/uk/en-GB/login') @@ -89,13 +88,15 @@ test('Allows customer to generate password token', async () => { ) ) // render our test component - await renderWithProviders(, { + const {user} = renderWithProviders(, { wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app} }) // enter credentials and submit - user.type(await screen.findByLabelText('Email'), 'foo@test.com') - user.click(within(await screen.findByTestId('sf-auth-modal-form')).getByText(/reset password/i)) + await user.type(await screen.findByLabelText('Email'), 'foo@test.com') + await user.click( + within(await screen.findByTestId('sf-auth-modal-form')).getByText(/reset password/i) + ) expect(await screen.findByText(/password reset/i, {}, {timeout: 12000})).toBeInTheDocument() @@ -103,9 +104,7 @@ test('Allows customer to generate password token', async () => { expect(screen.getByText(/foo@test.com/i)).toBeInTheDocument() }) - await waitFor(() => { - user.click(screen.getByText('Back to Sign In')) - }) + await user.click(screen.getByText('Back to Sign In')) await waitFor(() => { expect(window.location.pathname).toBe('/uk/en-GB/login') @@ -126,10 +125,12 @@ test('Renders error message from server', async () => { ) ) ) - await renderWithProviders() + const {user} = renderWithProviders() - user.type(await screen.findByLabelText('Email'), 'foo@test.com') - user.click(within(await screen.findByTestId('sf-auth-modal-form')).getByText(/reset password/i)) + await user.type(await screen.findByLabelText('Email'), 'foo@test.com') + await user.click( + within(await screen.findByTestId('sf-auth-modal-form')).getByText(/reset password/i) + ) await waitFor(() => { expect(screen.getByText('500 Internal Server Error')).toBeInTheDocument() diff --git a/packages/template-retail-react-app/app/partials/product-view/index.test.js b/packages/template-retail-react-app/app/partials/product-view/index.test.js index 8af85c13e6..a9673d4cb2 100644 --- a/packages/template-retail-react-app/app/partials/product-view/index.test.js +++ b/packages/template-retail-react-app/app/partials/product-view/index.test.js @@ -106,6 +106,7 @@ test('ProductView Component renders with updateWishlist event handler', async () }) test('Product View can update quantity', async () => { + const user = userEvent.setup() const addToCart = jest.fn() await renderWithProviders() @@ -119,7 +120,7 @@ test('Product View can update quantity', async () => { }) // update item quantity - userEvent.type(quantityBox, '{backspace}3') + await user.type(quantityBox, '{backspace}3') await waitFor(() => { expect(quantityBox).toHaveValue('3') @@ -177,6 +178,8 @@ test('renders a product set properly - child item', () => { }) test('validateOrderability callback is called when adding a set to cart', async () => { + const user = userEvent.setup() + const parent = mockProductSet const validateOrderability = jest.fn() @@ -190,7 +193,7 @@ test('validateOrderability callback is called when adding a set to cart', async ) const button = screen.getByRole('button', {name: /add set to cart/i}) - userEvent.click(button) + await user.click(button) await waitFor(() => { expect(validateOrderability).toHaveBeenCalledTimes(1) @@ -198,6 +201,8 @@ test('validateOrderability callback is called when adding a set to cart', async }) test('onVariantSelected callback is called after successfully selected a variant', async () => { + const user = userEvent.setup() + const onVariantSelected = jest.fn() const child = mockProductSet.setProducts[0] @@ -211,7 +216,7 @@ test('onVariantSelected callback is called after successfully selected a variant ) const size = screen.getByRole('radio', {name: /xl/i}) - userEvent.click(size) + await user.click(size) await waitFor(() => { expect(onVariantSelected).toHaveBeenCalledTimes(1) diff --git a/packages/template-retail-react-app/app/theme/components/project/breadcrumb.js b/packages/template-retail-react-app/app/theme/components/project/breadcrumb.js index 9a7091b570..ac491ee8db 100644 --- a/packages/template-retail-react-app/app/theme/components/project/breadcrumb.js +++ b/packages/template-retail-react-app/app/theme/components/project/breadcrumb.js @@ -17,7 +17,8 @@ export default { }, link: { paddingTop: 3, - paddingBottom: 3 + paddingBottom: 3, + textDecoration: 'none' } }, parts: ['container', 'icon', 'link'] diff --git a/packages/template-retail-react-app/app/theme/components/project/swatch-group.js b/packages/template-retail-react-app/app/theme/components/project/swatch-group.js index cea197e502..334bc1ff22 100644 --- a/packages/template-retail-react-app/app/theme/components/project/swatch-group.js +++ b/packages/template-retail-react-app/app/theme/components/project/swatch-group.js @@ -111,5 +111,5 @@ export default { swatchButton: {} }) }, - parts: ['swatch', 'swatchItem'] + parts: ['swatch', 'swatchButton'] } diff --git a/packages/template-retail-react-app/app/translations/compiled/en-GB.json b/packages/template-retail-react-app/app/translations/compiled/en-GB.json index 7373cd1f9b..d1110f8acc 100644 --- a/packages/template-retail-react-app/app/translations/compiled/en-GB.json +++ b/packages/template-retail-react-app/app/translations/compiled/en-GB.json @@ -29,6 +29,12 @@ "value": "Add Address" } ], + "account_addresses.info.address_removed": [ + { + "type": 0, + "value": "Address removed" + } + ], "account_addresses.info.address_updated": [ { "type": 0, @@ -143,6 +149,24 @@ "value": "Back to Order History" } ], + "account_order_detail.shipping_status.not_shipped": [ + { + "type": 0, + "value": "Not shipped" + } + ], + "account_order_detail.shipping_status.part_shipped": [ + { + "type": 0, + "value": "Partially shipped" + } + ], + "account_order_detail.shipping_status.shipped": [ + { + "type": 0, + "value": "Shipped" + } + ], "account_order_detail.title.order_details": [ { "type": 0, @@ -219,36 +243,6 @@ "value": "Order History" } ], - "account_payment_methods.button.add_method": [ - { - "type": 0, - "value": "Add Payment Method" - } - ], - "account_payment_methods.description.add_method_for_faster_checkout": [ - { - "type": 0, - "value": "Add a new payment method for faster checkout." - } - ], - "account_payment_methods.heading.no_saved_methods": [ - { - "type": 0, - "value": "No Saved Payment Methods" - } - ], - "account_payment_methods.info.new_method_saved": [ - { - "type": 0, - "value": "New Payment Method Saved" - } - ], - "account_payment_methods.title.payment_methods": [ - { - "type": 0, - "value": "Payment Methods" - } - ], "account_wishlist.button.continue_shopping": [ { "type": 0, @@ -419,50 +413,6 @@ "value": "Password Reset" } ], - "card_payment_form.heading.new_payment_method": [ - { - "type": 0, - "value": "Add New Payment Method" - } - ], - "cart.info.added_to_wishlist": [ - { - "type": 1, - "value": "quantity" - }, - { - "type": 0, - "value": " " - }, - { - "offset": 0, - "options": { - "one": { - "value": [ - { - "type": 0, - "value": "item" - } - ] - }, - "other": { - "value": [ - { - "type": 0, - "value": "items" - } - ] - } - }, - "pluralType": "cardinal", - "type": 6, - "value": "quantity" - }, - { - "type": 0, - "value": " added to wishlist" - } - ], "cart.info.removed_from_cart": [ { "type": 0, @@ -595,6 +545,12 @@ "value": "Place Order" } ], + "checkout.message.generic_error": [ + { + "type": 0, + "value": "An unexpected error occurred during checkout." + } + ], "checkout_confirmation.button.create_account": [ { "type": 0, @@ -1009,12 +965,6 @@ "value": "Order History" } ], - "drawer_menu.button.payment_methods": [ - { - "type": 0, - "value": "Payment Methods" - } - ], "drawer_menu.link.about_us": [ { "type": 0, @@ -1311,12 +1261,6 @@ "value": "Order History" } ], - "global.account.link.payment_methods": [ - { - "type": 0, - "value": "Payment Methods" - } - ], "global.account.link.wishlist": [ { "type": 0, @@ -1329,12 +1273,56 @@ "value": "Something went wrong. Try again!" } ], + "global.info.added_to_wishlist": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to wishlist" + } + ], "global.info.removed_from_wishlist": [ { "type": 0, "value": "Item removed from wishlist" } ], + "global.link.added_to_wishlist.view_wishlist": [ + { + "type": 0, + "value": "View" + } + ], "header.button.assistive_msg.logo": [ { "type": 0, @@ -1569,6 +1557,12 @@ "value": "Sale" } ], + "item_price.label.starting_at": [ + { + "type": 0, + "value": "Starting at" + } + ], "lCPCxk": [ { "type": 0, @@ -2139,30 +2133,12 @@ "value": "1 uppercase letter" } ], - "payment_selection.button.save_and_continue": [ - { - "type": 0, - "value": "Save & Continue" - } - ], - "payment_selection.heading.add_new_card": [ - { - "type": 0, - "value": "Add New Card" - } - ], "payment_selection.heading.credit_card": [ { "type": 0, "value": "Credit Card" } ], - "payment_selection.message.select_payment_method": [ - { - "type": 0, - "value": "Please select a payment method." - } - ], "payment_selection.tooltip.secure_payment": [ { "type": 0, @@ -2205,44 +2181,6 @@ "value": "Coming Soon" } ], - "product_detail.info.added_to_wishlist": [ - { - "type": 1, - "value": "quantity" - }, - { - "type": 0, - "value": " " - }, - { - "offset": 0, - "options": { - "one": { - "value": [ - { - "type": 0, - "value": "item" - } - ] - }, - "other": { - "value": [ - { - "type": 0, - "value": "items" - } - ] - } - }, - "pluralType": "cardinal", - "type": 6, - "value": "quantity" - }, - { - "type": 0, - "value": " added to wishlist" - } - ], "product_detail.recommended_products.title.complete_set": [ { "type": 0, @@ -2289,44 +2227,6 @@ "value": "Sort By" } ], - "product_list.info.added_to_wishlist": [ - { - "type": 1, - "value": "quantity" - }, - { - "type": 0, - "value": " " - }, - { - "offset": 0, - "options": { - "one": { - "value": [ - { - "type": 0, - "value": "item" - } - ] - }, - "other": { - "value": [ - { - "type": 0, - "value": "items" - } - ] - } - }, - "pluralType": "cardinal", - "type": 6, - "value": "quantity" - }, - { - "type": 0, - "value": " added to wishlist" - } - ], "product_list.modal.button.clear_filters": [ { "type": 0, @@ -2369,6 +2269,24 @@ "value": "Wishlist" } ], + "product_tile.label.starting_at_price": [ + { + "type": 0, + "value": "Starting at" + } + ], + "product_view.button.add_set_to_cart": [ + { + "type": 0, + "value": "Add Set to Cart" + } + ], + "product_view.button.add_set_to_wishlist": [ + { + "type": 0, + "value": "Add Set to Wishlist" + } + ], "product_view.button.add_to_cart": [ { "type": 0, @@ -2393,6 +2311,12 @@ "value": "Quantity" } ], + "product_view.label.starting_at_price": [ + { + "type": 0, + "value": "Starting at" + } + ], "product_view.link.full_details": [ { "type": 0, @@ -2465,44 +2389,6 @@ "value": "Recent Searches" } ], - "recommended_products.info.added_to_wishlist": [ - { - "type": 1, - "value": "quantity" - }, - { - "type": 0, - "value": " " - }, - { - "offset": 0, - "options": { - "one": { - "value": [ - { - "type": 0, - "value": "item" - } - ] - }, - "other": { - "value": [ - { - "type": 0, - "value": "items" - } - ] - } - }, - "pluralType": "cardinal", - "type": 6, - "value": "quantity" - }, - { - "type": 0, - "value": " added to wishlist" - } - ], "register_form.action.sign_in": [ { "type": 0, @@ -3243,6 +3129,30 @@ "value": "New Password" } ], + "wishlist_primary_action.button.add_set_to_cart": [ + { + "type": 0, + "value": "Add Set to Cart" + } + ], + "wishlist_primary_action.button.add_to_cart": [ + { + "type": 0, + "value": "Add to Cart" + } + ], + "wishlist_primary_action.button.view_full_details": [ + { + "type": 0, + "value": "View Full Details" + } + ], + "wishlist_primary_action.button.view_options": [ + { + "type": 0, + "value": "View Options" + } + ], "wishlist_primary_action.info.added_to_cart": [ { "type": 1, diff --git a/packages/template-retail-react-app/app/translations/en-GB.json b/packages/template-retail-react-app/app/translations/en-GB.json index 4e458e5f04..a2a39058cc 100644 --- a/packages/template-retail-react-app/app/translations/en-GB.json +++ b/packages/template-retail-react-app/app/translations/en-GB.json @@ -14,6 +14,9 @@ "account_addresses.button.add_address": { "defaultMessage": "Add Address" }, + "account_addresses.info.address_removed": { + "defaultMessage": "Address removed" + }, "account_addresses.info.address_updated": { "defaultMessage": "Address updated" }, @@ -65,6 +68,15 @@ "account_order_detail.link.back_to_history": { "defaultMessage": "Back to Order History" }, + "account_order_detail.shipping_status.not_shipped": { + "defaultMessage": "Not shipped" + }, + "account_order_detail.shipping_status.part_shipped": { + "defaultMessage": "Partially shipped" + }, + "account_order_detail.shipping_status.shipped": { + "defaultMessage": "Shipped" + }, "account_order_detail.title.order_details": { "defaultMessage": "Order Details" }, @@ -96,21 +108,6 @@ "account_order_history.title.order_history": { "defaultMessage": "Order History" }, - "account_payment_methods.button.add_method": { - "defaultMessage": "Add Payment Method" - }, - "account_payment_methods.description.add_method_for_faster_checkout": { - "defaultMessage": "Add a new payment method for faster checkout." - }, - "account_payment_methods.heading.no_saved_methods": { - "defaultMessage": "No Saved Payment Methods" - }, - "account_payment_methods.info.new_method_saved": { - "defaultMessage": "New Payment Method Saved" - }, - "account_payment_methods.title.payment_methods": { - "defaultMessage": "Payment Methods" - }, "account_wishlist.button.continue_shopping": { "defaultMessage": "Continue Shopping" }, @@ -165,12 +162,6 @@ "auth_modal.password_reset_success.title.password_reset": { "defaultMessage": "Password Reset" }, - "card_payment_form.heading.new_payment_method": { - "defaultMessage": "Add New Payment Method" - }, - "cart.info.added_to_wishlist": { - "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" - }, "cart.info.removed_from_cart": { "defaultMessage": "Item removed from cart" }, @@ -216,6 +207,9 @@ "checkout.button.place_order": { "defaultMessage": "Place Order" }, + "checkout.message.generic_error": { + "defaultMessage": "An unexpected error occurred during checkout." + }, "checkout_confirmation.button.create_account": { "defaultMessage": "Create Account" }, @@ -381,11 +375,11 @@ }, "credit_card_fields.tool_tip.security_code": { "defaultMessage": "This 3-digit code can be found on the back of your card.", - "description": "Default credit card security code help text" + "description": "Generic credit card security code help text" }, "credit_card_fields.tool_tip.security_code.american_express": { "defaultMessage": "This 4-digit code can be found on the front of your card.", - "description": "American Express credit card security code help text" + "description": "American Express security code help text" }, "drawer_menu.button.account_details": { "defaultMessage": "Account Details" @@ -402,9 +396,6 @@ "drawer_menu.button.order_history": { "defaultMessage": "Order History" }, - "drawer_menu.button.payment_methods": { - "defaultMessage": "Payment Methods" - }, "drawer_menu.link.about_us": { "defaultMessage": "About Us" }, @@ -537,18 +528,21 @@ "global.account.link.order_history": { "defaultMessage": "Order History" }, - "global.account.link.payment_methods": { - "defaultMessage": "Payment Methods" - }, "global.account.link.wishlist": { "defaultMessage": "Wishlist" }, "global.error.something_went_wrong": { "defaultMessage": "Something went wrong. Try again!" }, + "global.info.added_to_wishlist": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" + }, "global.info.removed_from_wishlist": { "defaultMessage": "Item removed from wishlist" }, + "global.link.added_to_wishlist.view_wishlist": { + "defaultMessage": "View" + }, "header.button.assistive_msg.logo": { "defaultMessage": "Logo" }, @@ -662,6 +656,9 @@ "defaultMessage": "Sale", "description": "A sale badge placed on top of a product image" }, + "item_price.label.starting_at": { + "defaultMessage": "Starting at" + }, "lCPCxk": { "defaultMessage": "Please select all your options above" }, @@ -932,18 +929,9 @@ "defaultMessage": "1 uppercase letter", "description": "Password requirement" }, - "payment_selection.button.save_and_continue": { - "defaultMessage": "Save & Continue" - }, - "payment_selection.heading.add_new_card": { - "defaultMessage": "Add New Card" - }, "payment_selection.heading.credit_card": { "defaultMessage": "Credit Card" }, - "payment_selection.message.select_payment_method": { - "defaultMessage": "Please select a payment method." - }, "payment_selection.tooltip.secure_payment": { "defaultMessage": "This is a secure SSL encrypted payment." }, @@ -966,9 +954,6 @@ "product_detail.accordion.message.coming_soon": { "defaultMessage": "Coming Soon" }, - "product_detail.info.added_to_wishlist": { - "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" - }, "product_detail.recommended_products.title.complete_set": { "defaultMessage": "Complete the Set" }, @@ -990,9 +975,6 @@ "product_list.drawer.title.sort_by": { "defaultMessage": "Sort By" }, - "product_list.info.added_to_wishlist": { - "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" - }, "product_list.modal.button.clear_filters": { "defaultMessage": "Clear Filters" }, @@ -1008,6 +990,15 @@ "product_tile.assistive_msg.wishlist": { "defaultMessage": "Wishlist" }, + "product_tile.label.starting_at_price": { + "defaultMessage": "Starting at" + }, + "product_view.button.add_set_to_cart": { + "defaultMessage": "Add Set to Cart" + }, + "product_view.button.add_set_to_wishlist": { + "defaultMessage": "Add Set to Wishlist" + }, "product_view.button.add_to_cart": { "defaultMessage": "Add to Cart" }, @@ -1020,6 +1011,9 @@ "product_view.label.quantity": { "defaultMessage": "Quantity" }, + "product_view.label.starting_at_price": { + "defaultMessage": "Starting at" + }, "product_view.link.full_details": { "defaultMessage": "See full details" }, @@ -1056,9 +1050,6 @@ "recent_searches.heading.recent_searches": { "defaultMessage": "Recent Searches" }, - "recommended_products.info.added_to_wishlist": { - "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" - }, "register_form.action.sign_in": { "defaultMessage": "Sign in" }, @@ -1399,6 +1390,18 @@ "use_update_password_fields.label.new_password": { "defaultMessage": "New Password" }, + "wishlist_primary_action.button.add_set_to_cart": { + "defaultMessage": "Add Set to Cart" + }, + "wishlist_primary_action.button.add_to_cart": { + "defaultMessage": "Add to Cart" + }, + "wishlist_primary_action.button.view_full_details": { + "defaultMessage": "View Full Details" + }, + "wishlist_primary_action.button.view_options": { + "defaultMessage": "View Options" + }, "wishlist_primary_action.info.added_to_cart": { "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to cart" }, diff --git a/packages/template-retail-react-app/app/utils/site-utils.js b/packages/template-retail-react-app/app/utils/site-utils.js index be9b77082a..0ec6c7a97c 100644 --- a/packages/template-retail-react-app/app/utils/site-utils.js +++ b/packages/template-retail-react-app/app/utils/site-utils.js @@ -158,13 +158,11 @@ export const getConfigMatcher = (config) => { const locales = [...localesIds, ...localeAliases].filter(Boolean) // prettier-ignore - const searchPatternForSite = `site=(?${sites.join('|')})` // prettier-ignore // eslint-disable-next-line const pathPattern = `(?:\/(?${sites.join('|')}))?(?:\/(?${locales.join("|")}))?(?!\\w)` // prettier-ignore - const searchPatternForLocale = `locale=(?${locales.join('|')})` const pathMatcher = new RegExp(pathPattern) const searchMatcherForSite = new RegExp(searchPatternForSite) diff --git a/packages/template-retail-react-app/app/utils/test-utils.js b/packages/template-retail-react-app/app/utils/test-utils.js index 1ff373b9ef..25338fd186 100644 --- a/packages/template-retail-react-app/app/utils/test-utils.js +++ b/packages/template-retail-react-app/app/utils/test-utils.js @@ -25,7 +25,7 @@ import {CurrencyProvider, MultiSiteProvider} from 'retail-react-app/app/contexts import {createUrlTemplate} from 'retail-react-app/app/utils/url' import {getSiteByReference} from 'retail-react-app/app/utils/site-utils' import jwt from 'jsonwebtoken' - +import userEvent from '@testing-library/user-event' // This JWT's payload is special // it includes 3 fields that commerce-sdk-react cares: // exp, isb and sub @@ -182,9 +182,10 @@ export const renderWithProviders = (children, options) => { } } }) + const user = userEvent.setup() const locals = {} - return render(children, { + const res = render(children, { wrapper: () => ( {children} @@ -192,6 +193,7 @@ export const renderWithProviders = (children, options) => { ), ...options }) + return {user, ...res} } /** diff --git a/packages/template-retail-react-app/app/utils/utils.js b/packages/template-retail-react-app/app/utils/utils.js index 61187c6822..ce30d449d2 100644 --- a/packages/template-retail-react-app/app/utils/utils.js +++ b/packages/template-retail-react-app/app/utils/utils.js @@ -193,3 +193,9 @@ export const mergeMatchedItems = (arr1 = [], arr2 = []) => { }) return merged } + +/** + * This util func determines if the app is finished hydration + * @return {boolean} + */ +export const isHydrated = () => typeof window !== 'undefined' && !window.__HYDRATING__ diff --git a/packages/template-retail-react-app/config/mocks/default.js b/packages/template-retail-react-app/config/mocks/default.js index 5fc43ce637..38cce86d66 100644 --- a/packages/template-retail-react-app/config/mocks/default.js +++ b/packages/template-retail-react-app/config/mocks/default.js @@ -118,5 +118,14 @@ module.exports = { path: 'ocapi' } ] + }, + mockFetchOCAPISessions: (url) => { + if (url.includes('/sessions')) { + return { + ok: true, + status: 200 + } + } + throw new Error(`Unhandled request: ${url}`) } } diff --git a/packages/template-retail-react-app/jest-setup.js b/packages/template-retail-react-app/jest-setup.js index 8d013cb8b2..f7033a9364 100644 --- a/packages/template-retail-react-app/jest-setup.js +++ b/packages/template-retail-react-app/jest-setup.js @@ -69,6 +69,9 @@ export const setupMockServer = () => { rest.post('*/v3/activities/EinsteinTestSite/*', (req, res, ctx) => { return res(ctx.delay(0), ctx.status(200), ctx.json({})) }), + rest.post('*/activities/EinsteinTestSite/*', (req, res, ctx) => { + return res(ctx.delay(0), ctx.status(200), ctx.json({})) + }), rest.post('*/v3/personalization/recs/EinsteinTestSite/*', (req, res, ctx) => { return res(ctx.delay(0), ctx.status(200), ctx.json({})) }) @@ -154,3 +157,35 @@ if (typeof window.matchMedia !== 'function') { })) }) } + +const prepareHandlers = (handlerConfig = []) => { + return handlerConfig.map((config) => { + return rest[config.method?.toLowerCase() || 'get'](config.path, (req, res, ctx) => { + return res( + ctx.delay(0), + ctx.status(config.status || 200), + config.res && ctx.json(config.res(req, res, ctx)) + ) + }) + }) +} + +/** + * This util function allows developer to prepend handlers to the mock server by passing a config array of objects + * + * @param handlerConfig + * @example + * const handlers = [ + * { + * path: "*\/products/" + * method: 'post', + * res: (req, res, ctx) => { + * return mockData + * } + * } + * ] + */ +export const prependHandlersToServer = (handlerConfig) => { + const handlers = prepareHandlers(handlerConfig) + global.server.use(...handlers) +} diff --git a/packages/template-retail-react-app/package.json b/packages/template-retail-react-app/package.json index d1b9d8c0f6..a9c271ecdf 100644 --- a/packages/template-retail-react-app/package.json +++ b/packages/template-retail-react-app/package.json @@ -4,9 +4,7 @@ "license": "See license in LICENSE", "author": "cc-pwa-kit@salesforce.com", "ccExtensibility": { - "extendable": [ - "retail-react-app" - ] + "extendable": ["retail-react-app"] }, "scripts": { "analyze-build": "cross-env MOBIFY_ANALYZE=true npm run build", @@ -37,10 +35,10 @@ "last 4 ChromeAndroid versions" ], "devDependencies": { - "@chakra-ui/icons": "^1.1.7", - "@chakra-ui/react": "^1.8.9", - "@chakra-ui/skip-nav": "^1.2.6", - "@chakra-ui/system": "^1.12.1", + "@chakra-ui/icons": "^2.0.19", + "@chakra-ui/react": "^2.6.0", + "@chakra-ui/skip-nav": "^2.0.15", + "@chakra-ui/system": "^2.5.6", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@formatjs/cli": "^6.0.4", @@ -51,16 +49,15 @@ "@tanstack/react-query-devtools": "^4.29.1", "@testing-library/dom": "^9.0.1", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^11.2.7", - "@testing-library/react-hooks": "^7.0.2", - "@testing-library/user-event": "^12.8.3", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", "base64-arraybuffer": "^0.2.0", "bundlesize2": "^0.0.31", "card-validator": "^8.1.1", "commerce-sdk-react-preview": "2.8.0-dev", "cross-env": "^5.2.1", "focus-visible": "^5.2.0", - "framer-motion": "^3.10.6", + "framer-motion": "^10.12.9", "full-icu": "^1.5.0", "helmet": "^4.6.0", "jest-fetch-mock": "^2.1.2", @@ -72,26 +69,23 @@ "nanoid": "^3.3.4", "njwt": "^1.2.0", "prop-types": "^15.8.1", - "pwa-kit-dev": "2.8.0-dev", - "pwa-kit-react-sdk": "2.8.0-dev", - "pwa-kit-runtime": "2.8.0-dev", + "pwa-kit-dev": "3.0.0-dev", + "pwa-kit-react-sdk": "3.0.0-dev", + "pwa-kit-runtime": "3.0.0-dev", "query-string": "^7.1.3", "raf": "^3.4.1", "randomstring": "^1.2.3", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", - "react-hook-form": "^6.15.8", + "react-hook-form": "^7.43.9", "react-intl": "^5.25.1", "react-router-dom": "^5.3.4", "shelljs": "^0.8.5" }, - "peerDependencies": { - "@chakra-ui/system": "^1.12.1" - }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "bundlesize": [ { @@ -102,5 +96,8 @@ "path": "build/vendor.js", "maxSize": "320 kB" } - ] + ], + "overrides": { + "nwsapi": "2.2.2" + } } diff --git a/packages/template-typescript-minimal/app/pages/home.tsx b/packages/template-typescript-minimal/app/pages/home.tsx index cbdeffdba7..b963be6c1f 100644 --- a/packages/template-typescript-minimal/app/pages/home.tsx +++ b/packages/template-typescript-minimal/app/pages/home.tsx @@ -117,26 +117,28 @@ const Home = ({value}: Props) => {

- This page is written in Typescript -
-
- React query works if this is not empty: "{query.data}" -
-
- Server-side getProps works if this is a valid expression: "5 times 7 is{' '} - {value} - " -
-
- Client-side JS works if this counter increments: {counter} -
-
- You can mix-and-match JS and TS -
-
- -   - + <> + This page is written in Typescript +
+
+ React query works if this is not empty: "{query.data}" +
+
+ Server-side getProps works if this is a valid expression: "5 times + 7 is {value} + " +
+
+ Client-side JS works if this counter increments: {counter} +
+
+ You can mix-and-match JS and TS +
+
+ +   + +

diff --git a/packages/template-typescript-minimal/package-lock.json b/packages/template-typescript-minimal/package-lock.json index 509d97fac0..a91eac0c6a 100644 --- a/packages/template-typescript-minimal/package-lock.json +++ b/packages/template-typescript-minimal/package-lock.json @@ -1,27 +1,27 @@ { "name": "typescript-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "typescript-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "devDependencies": { "@loadable/component": "^5.15.3", "@tanstack/react-query": "^4.28.0", "@types/loadable__component": "^5.13.4", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "react-router-dom": "^5.3.4", "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } }, "node_modules/@babel/runtime": { @@ -58,9 +58,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true, "funding": { "type": "github", @@ -68,12 +68,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "dependencies": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -110,9 +110,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -121,12 +121,12 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "dependencies": { - "@types/react": "^17" + "@types/react": "*" } }, "node_modules/@types/scheduler": { @@ -218,36 +218,34 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "node_modules/react-helmet": { @@ -331,13 +329,12 @@ "dev": true }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/tiny-invariant": { @@ -403,18 +400,18 @@ } }, "@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true }, "@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "requires": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" } }, @@ -434,9 +431,9 @@ "dev": true }, "@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -445,12 +442,12 @@ } }, "@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "requires": { - "@types/react": "^17" + "@types/react": "*" } }, "@types/scheduler": { @@ -536,30 +533,28 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "react-helmet": { @@ -632,13 +627,12 @@ "dev": true }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "tiny-invariant": { diff --git a/packages/template-typescript-minimal/package.json b/packages/template-typescript-minimal/package.json index 62ff798e4d..14c5a1bfe1 100644 --- a/packages/template-typescript-minimal/package.json +++ b/packages/template-typescript-minimal/package.json @@ -1,6 +1,6 @@ { "name": "typescript-minimal", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "private": true, "scripts": { "build": "pwa-kit-dev build", @@ -20,20 +20,20 @@ "@loadable/component": "^5.15.3", "@tanstack/react-query": "^4.28.0", "@types/loadable__component": "^5.13.4", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", - "pwa-kit-dev": "2.8.0-dev", - "pwa-kit-react-sdk": "2.8.0-dev", - "pwa-kit-runtime": "2.8.0-dev", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "pwa-kit-dev": "3.0.0-dev", + "pwa-kit-react-sdk": "3.0.0-dev", + "pwa-kit-runtime": "3.0.0-dev", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "react-router-dom": "^5.3.4", "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "mobify": { "ssrEnabled": true, diff --git a/packages/test-commerce-sdk-react/app/pages/use-shopper-customer.tsx b/packages/test-commerce-sdk-react/app/pages/use-shopper-customer.tsx index 0b0bc96bfc..f5999cbb57 100644 --- a/packages/test-commerce-sdk-react/app/pages/use-shopper-customer.tsx +++ b/packages/test-commerce-sdk-react/app/pages/use-shopper-customer.tsx @@ -264,7 +264,11 @@ function UseCustomer() { > loginRegisteredUser - {loginError &&

Error: {loginErrorMessage}

} + {loginError && ( +

+ <>Error: {loginErrorMessage} +

+ )} ) : ( <> diff --git a/packages/test-commerce-sdk-react/package-lock.json b/packages/test-commerce-sdk-react/package-lock.json index c4c8ae598d..9dc1429498 100644 --- a/packages/test-commerce-sdk-react/package-lock.json +++ b/packages/test-commerce-sdk-react/package-lock.json @@ -1,28 +1,28 @@ { "name": "test-commerce-sdk-react", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "test-commerce-sdk-react", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "devDependencies": { "@loadable/component": "^5.15.3", "@tanstack/react-query": "^4.28.0", "@types/loadable__component": "^5.13.4", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.1", "@types/react-router-dom": "^5.3.3", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "react-router-dom": "^5.3.4", "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" } }, "node_modules/@babel/runtime": { @@ -59,9 +59,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true, "funding": { "type": "github", @@ -69,12 +69,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "dependencies": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -117,9 +117,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -128,12 +128,12 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "dependencies": { - "@types/react": "^17" + "@types/react": "*" } }, "node_modules/@types/react-router": { @@ -246,36 +246,34 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "node_modules/react-helmet": { @@ -359,13 +357,12 @@ "dev": true }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/tiny-invariant": { @@ -431,18 +428,18 @@ } }, "@tanstack/query-core": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", - "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.7.tgz", + "integrity": "sha512-GXG4b5hV2Loir+h2G+RXhJdoZhJLnrBWsuLB2r0qBRyhWuXq9w/dWxzvpP89H0UARlH6Mr9DiVj4SMtpkF/aUA==", "dev": true }, "@tanstack/react-query": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", - "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", + "version": "4.29.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.7.tgz", + "integrity": "sha512-ijBWEzAIo09fB1yd22slRZzprrZ5zMdWYzBnCg5qiXuFbH78uGN1qtGz8+Ed4MuhaPaYSD+hykn+QEKtQviEtg==", "dev": true, "requires": { - "@tanstack/query-core": "4.29.5", + "@tanstack/query-core": "4.29.7", "use-sync-external-store": "^1.2.0" } }, @@ -468,9 +465,9 @@ "dev": true }, "@types/react": { - "version": "17.0.59", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.59.tgz", - "integrity": "sha512-gSON5zWYIGyoBcycCE75E9+r6dCC2dHdsrVkOEiIYNU5+Q28HcBAuqvDuxHcCbMfHBHdeT5Tva/AFn3rnMKE4g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -479,12 +476,12 @@ } }, "@types/react-dom": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", - "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", + "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "dev": true, "requires": { - "@types/react": "^17" + "@types/react": "*" } }, "@types/react-router": { @@ -591,30 +588,28 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "dev": true }, "react-helmet": { @@ -687,13 +682,12 @@ "dev": true }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "tiny-invariant": { diff --git a/packages/test-commerce-sdk-react/package.json b/packages/test-commerce-sdk-react/package.json index a831beaac0..2e8bb2991f 100644 --- a/packages/test-commerce-sdk-react/package.json +++ b/packages/test-commerce-sdk-react/package.json @@ -1,6 +1,6 @@ { "name": "test-commerce-sdk-react", - "version": "2.8.0-dev", + "version": "3.0.0-dev", "private": true, "scripts": { "build": "pwa-kit-dev build", @@ -20,23 +20,23 @@ "@loadable/component": "^5.15.3", "@tanstack/react-query": "^4.28.0", "@types/loadable__component": "^5.13.4", - "@types/react": "^17.0.53", - "@types/react-dom": "^17.0.19", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.1", "@types/react-router-dom": "^5.3.3", - "commerce-sdk-react-preview": "^2.8.0-dev", - "internal-lib-build": "2.8.0-dev", - "pwa-kit-dev": "2.8.0-dev", - "pwa-kit-react-sdk": "2.8.0-dev", - "pwa-kit-runtime": "2.8.0-dev", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "commerce-sdk-react-preview": "^3.0.0-dev", + "internal-lib-build": "^3.0.0-dev", + "pwa-kit-dev": "^3.0.0-dev", + "pwa-kit-react-sdk": "^3.0.0-dev", + "pwa-kit-runtime": "^3.0.0-dev", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-helmet": "^6.1.0", "react-router-dom": "^5.3.4", "typescript": "4.8.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0", - "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": "^16.11.0 || ^18.0.0", + "npm": "^8.0.0 || ^9.0.0" }, "mobify": { "ssrEnabled": true,