From 4eafb6584044002d13899bd00904d60080274035 Mon Sep 17 00:00:00 2001 From: Alex Vuong <52219283+alexvuong@users.noreply.github.com> Date: Fri, 28 Apr 2023 12:19:18 -0700 Subject: [PATCH 1/6] Consume new version of the commerce-sdk-isomorphic to enable Phased Launches support HTTP Basic Auth (#1153) * Upgrade commerce-isomorphic to 1.10.1 --- packages/commerce-sdk-react/package-lock.json | 61 ++++++++----------- packages/commerce-sdk-react/package.json | 2 +- .../src/hooks/ShopperBaskets/index.test.ts | 8 ++- .../commerce-sdk-react/src/test-utils.tsx | 2 +- packages/internal-lib-build/package-lock.json | 1 - 5 files changed, 33 insertions(+), 41 deletions(-) diff --git a/packages/commerce-sdk-react/package-lock.json b/packages/commerce-sdk-react/package-lock.json index 7a5f774bc2..2bcc7b5682 100644 --- a/packages/commerce-sdk-react/package-lock.json +++ b/packages/commerce-sdk-react/package-lock.json @@ -9,7 +9,7 @@ "version": "2.8.0-dev", "license": "See license in LICENSE", "dependencies": { - "commerce-sdk-isomorphic": "^1.9.0", + "commerce-sdk-isomorphic": "^1.10.1", "js-cookie": "^3.0.1", "jwt-decode": "^3.1.2" }, @@ -41,6 +41,9 @@ "node": "^16.0.0 || ^18.0.0", "npm": "^7.0.0 || ^8.0.0 || ^9.0.0" }, + "optionalDependencies": { + "prop-types": "^15.8.1" + }, "peerDependencies": { "@tanstack/react-query": "^4", "react": "^17", @@ -750,12 +753,12 @@ "dev": true }, "node_modules/commerce-sdk-isomorphic": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/commerce-sdk-isomorphic/-/commerce-sdk-isomorphic-1.9.0.tgz", - "integrity": "sha512-fT0s/u4EEnE7R7JXGOTFc0NACpxb9CEJokZF7UI2RNlpZMb3hmvdUoBdXDuxv1Pfg6zG813Gk98J7nH5cwLOnw==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/commerce-sdk-isomorphic/-/commerce-sdk-isomorphic-1.10.1.tgz", + "integrity": "sha512-aG5WgEf3K2qXoWETERYunmHFrN6f2AhkaUvtxGwV6BJUHfgYD8pouQxeuc2x3otW0m+Mg6NLhp9gjwqndI9J6g==", "dependencies": { - "cross-fetch": "^3.1.5", - "nanoid": "^3.3.4" + "nanoid": "^3.3.4", + "node-fetch": "2" }, "engines": { "node": ">=10" @@ -787,14 +790,6 @@ "node": ">=4.0" } }, - "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==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1989,9 +1984,9 @@ } }, "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.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2233,7 +2228,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, + "devOptional": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -2244,7 +2239,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "devOptional": true }, "node_modules/propagate": { "version": "2.0.1", @@ -3362,12 +3357,12 @@ "dev": true }, "commerce-sdk-isomorphic": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/commerce-sdk-isomorphic/-/commerce-sdk-isomorphic-1.9.0.tgz", - "integrity": "sha512-fT0s/u4EEnE7R7JXGOTFc0NACpxb9CEJokZF7UI2RNlpZMb3hmvdUoBdXDuxv1Pfg6zG813Gk98J7nH5cwLOnw==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/commerce-sdk-isomorphic/-/commerce-sdk-isomorphic-1.10.1.tgz", + "integrity": "sha512-aG5WgEf3K2qXoWETERYunmHFrN6f2AhkaUvtxGwV6BJUHfgYD8pouQxeuc2x3otW0m+Mg6NLhp9gjwqndI9J6g==", "requires": { - "cross-fetch": "^3.1.5", - "nanoid": "^3.3.4" + "nanoid": "^3.3.4", + "node-fetch": "2" } }, "concat-map": { @@ -3385,14 +3380,6 @@ "cross-spawn": "^6.0.5" } }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -4306,9 +4293,9 @@ } }, "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.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "requires": { "whatwg-url": "^5.0.0" } @@ -4473,7 +4460,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, + "devOptional": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -4484,7 +4471,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "devOptional": true } } }, diff --git a/packages/commerce-sdk-react/package.json b/packages/commerce-sdk-react/package.json index 7e9d7a55a3..1977be2a6e 100644 --- a/packages/commerce-sdk-react/package.json +++ b/packages/commerce-sdk-react/package.json @@ -40,7 +40,7 @@ "version": "node ./scripts/version.js" }, "dependencies": { - "commerce-sdk-isomorphic": "^1.9.0", + "commerce-sdk-isomorphic": "^1.10.1", "js-cookie": "^3.0.1", "jwt-decode": "^3.1.2" }, diff --git a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/index.test.ts b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/index.test.ts index 7c6e256bed..391a7413a7 100644 --- a/packages/commerce-sdk-react/src/hooks/ShopperBaskets/index.test.ts +++ b/packages/commerce-sdk-react/src/hooks/ShopperBaskets/index.test.ts @@ -16,7 +16,13 @@ describe('Shopper Baskets hooks', () => { const unimplemented = getUnimplementedEndpoints(ShopperBaskets, queries, mutations) // If this test fails: create a new query hook, add the endpoint to the mutations enum, // or add it to the `expected` array with a comment explaining "TODO" or "never" (and why). - expect(unimplemented).toEqual([]) + expect(unimplemented).toEqual([ + 'updateAsAgentBasket', //TODO: implement later + 'addPriceAdjustmentToBasket', //TODO: implement later + 'removePriceAdjustmentFromBasket', //TODO: implement later + 'updatePriceAdjustmentInBasket', //TODO: implement later + 'updateAsStorefrontBasket' //TODO: implement later + ]) }) test('all mutations have cache update logic', () => { // unimplemented = value in mutations enum, but no method in cache update matrix diff --git a/packages/commerce-sdk-react/src/test-utils.tsx b/packages/commerce-sdk-react/src/test-utils.tsx index f700aa65a6..b44e4183c6 100644 --- a/packages/commerce-sdk-react/src/test-utils.tsx +++ b/packages/commerce-sdk-react/src/test-utils.tsx @@ -159,7 +159,7 @@ const getQueryName = (method: string): string => { * Gets the list of API endpoints that have not yet been implemented * @param SdkClass Class constructor from commerce-sdk-isomorphic to use as a source for endpoints * @param queryHooks Object containing implemented query hooks - * @param mutationsEnum Enum containing mutation endpoint names + * @param mutations Enum containing mutation endpoint names * @returns List of endpoints that don't have a query or mutation hook */ export const getUnimplementedEndpoints = ( diff --git a/packages/internal-lib-build/package-lock.json b/packages/internal-lib-build/package-lock.json index 7558ff705d..115d30725b 100644 --- a/packages/internal-lib-build/package-lock.json +++ b/packages/internal-lib-build/package-lock.json @@ -32,7 +32,6 @@ "babel-plugin-formatjs": "10.4.0", "commander": "^9.5.0", "jest": "^26.6.3", - "jest-cli": "^26.6.3", "jest-environment-jsdom": "^26.6.2", "jest-environment-jsdom-global": "^2.0.4", "jest-fetch-mock": "^2.1.2", From 288a65c26ffbd009e2b342e8cbce0a9c983afb37 Mon Sep 17 00:00:00 2001 From: Kevin He Date: Fri, 28 Apr 2023 13:57:57 -0700 Subject: [PATCH 2/6] [v3] Add suffix to ssr build files (#1158) * split ssr build on local (#1155) * add suffix to ssr build files (#1157) --- packages/pwa-kit-dev/src/configs/webpack/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pwa-kit-dev/src/configs/webpack/config.js b/packages/pwa-kit-dev/src/configs/webpack/config.js index 8ea845ac5d..41ee540b57 100644 --- a/packages/pwa-kit-dev/src/configs/webpack/config.js +++ b/packages/pwa-kit-dev/src/configs/webpack/config.js @@ -361,7 +361,7 @@ const renderer = // We want to split the build on local development to reduce memory usage. // It is required to have a single entry point for the remote server. // See pwa-kit-runtime/ssr/server/build-remote-server.js render method. - filename: mode === development ? '[name].js' : 'server-renderer.js', + filename: mode === development ? '[name]-server.js' : 'server-renderer.js', libraryTarget: 'commonjs2' }, plugins: [ From 4ff5e720dc6ffe2a0971985a4f52068eaa38aa2a Mon Sep 17 00:00:00 2001 From: Ben Chypak Date: Fri, 28 Apr 2023 16:21:29 -0700 Subject: [PATCH 3/6] [V3] Remove `cross-fetch` from `template-retail-react-app` (#1160) * Remove `cross-fetch` * Update CHANGELOG.md * Lint --- .../template-retail-react-app/CHANGELOG.md | 1 + .../app/hooks/use-einstein.js | 1 - .../app/hooks/use-einstein.test.js | 22 +- .../package-lock.json | 457 +++++++++--------- .../template-retail-react-app/package.json | 1 - 5 files changed, 253 insertions(+), 229 deletions(-) diff --git a/packages/template-retail-react-app/CHANGELOG.md b/packages/template-retail-react-app/CHANGELOG.md index afcbab3e98..5c1523b7da 100644 --- a/packages/template-retail-react-app/CHANGELOG.md +++ b/packages/template-retail-react-app/CHANGELOG.md @@ -1,4 +1,5 @@ ## v2.8.0-dev (Mar 03, 2023) +- 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.0 (Mar 03, 2023) diff --git a/packages/template-retail-react-app/app/hooks/use-einstein.js b/packages/template-retail-react-app/app/hooks/use-einstein.js index 73c8daebd9..f8de3304e9 100644 --- a/packages/template-retail-react-app/app/hooks/use-einstein.js +++ b/packages/template-retail-react-app/app/hooks/use-einstein.js @@ -5,7 +5,6 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import {useMemo, useState} from 'react' -import fetch from 'cross-fetch' import {getConfig} from 'pwa-kit-runtime/utils/ssr-config' import {useCommerceApi, useAccessToken, useUsid, useEncUserId} from 'commerce-sdk-react-preview' import {keysToCamel} from '../utils/utils' diff --git a/packages/template-retail-react-app/app/hooks/use-einstein.test.js b/packages/template-retail-react-app/app/hooks/use-einstein.test.js index 3c5c9fbc32..6b77260640 100644 --- a/packages/template-retail-react-app/app/hooks/use-einstein.test.js +++ b/packages/template-retail-react-app/app/hooks/use-einstein.test.js @@ -4,7 +4,6 @@ * 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 fetch from 'cross-fetch' import {EinsteinAPI} from './use-einstein' import { mockAddToCartProduct, @@ -14,13 +13,7 @@ import { mockBasket, mockRecommenderDetails } from './einstein-mock-data' - -jest.mock('cross-fetch', () => { - return { - __esModule: true, - default: jest.fn(() => ({json: jest.fn(), ok: true})) - } -}) +import fetchMock from 'jest-fetch-mock' const einsteinApi = new EinsteinAPI({ host: `http://localhost/test-path`, @@ -29,14 +22,21 @@ const einsteinApi = new EinsteinAPI({ cookieId: 'test-usid' }) -beforeEach(() => { - jest.resetModules() - fetch.mockClear() +const fetchOriginal = global.fetch + +beforeAll(() => { + global.fetch = fetchMock + global.fetch.mockResponse(JSON.stringify({})) +}) + +afterAll(() => { + global.fetch = fetchOriginal }) describe('EinsteinAPI', () => { test('viewProduct sends expected api request', async () => { await einsteinApi.sendViewProduct(mockProduct) + expect(fetch).toHaveBeenCalledWith( 'http://localhost/test-path/v3/activities/test-site-id/viewProduct', { diff --git a/packages/template-retail-react-app/package-lock.json b/packages/template-retail-react-app/package-lock.json index 6ca60bd250..85b00dbb5d 100644 --- a/packages/template-retail-react-app/package-lock.json +++ b/packages/template-retail-react-app/package-lock.json @@ -93,9 +93,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -196,9 +196,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" @@ -208,9 +208,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz", + "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==", "dev": true, "dependencies": { "core-js-pure": "^3.25.1", @@ -221,12 +221,12 @@ } }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -1155,9 +1155,9 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", + "integrity": "sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", @@ -1170,20 +1170,20 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "node_modules/@emotion/cache": { - "version": "11.10.7", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.7.tgz", - "integrity": "sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.8.tgz", + "integrity": "sha512-5fyqGHi51LU95o7qQ/vD1jyvC4uCY5GcBT+UgP4LHdpO9jPDlXqhrRr9/wCKmfoAvh5G/F7aOh4MwQa+8uEqhA==", "dev": true, "dependencies": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.1", "@emotion/utils": "^1.2.0", "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "node_modules/@emotion/hash": { @@ -1208,14 +1208,14 @@ "dev": true }, "node_modules/@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.8.tgz", + "integrity": "sha512-ZfGfiABtJ1P1OXqOBsW08EgCDp5fK6C5I8hUJauc/VcJBGSzqAirMnFslhFWnZJ/w5HxPI36XbvMV0l4KZHl+w==", "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", + "@emotion/babel-plugin": "^11.10.8", + "@emotion/cache": "^11.10.8", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0", @@ -1251,13 +1251,13 @@ "dev": true }, "node_modules/@emotion/styled": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", - "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.8.tgz", + "integrity": "sha512-gow0lF4Uw/QEdX2REMhI8v6wLOabPKJ+4HKNF0xdJ2DJdznN6fxaXpQOx6sNkyBhSUL558Rmcu1Lq/MYlVo4vw==", "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", + "@emotion/babel-plugin": "^11.10.8", "@emotion/is-prop-valid": "^1.2.0", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", @@ -1301,9 +1301,9 @@ "dev": true }, "node_modules/@formatjs/cli": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.0.4.tgz", - "integrity": "sha512-ivb+uUcYmHnffBkXM7OM4NDofxyfnVvW5G52p+M9Cg3DGMz3wVBm3TwW3SXgGGTft7CMWHeGQGXjxTOwBYKeEA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.1.0.tgz", + "integrity": "sha512-A05diK7zr8LEw4KFrtJfDhIa5PNHHcdM4wSEsgLqU/KqzcT4Jf6RhgU6RExe7UBpvKKl51Q/j2JpPRlretDXcQ==", "dev": true, "bin": { "formatjs": "bin/formatjs" @@ -1468,12 +1468,12 @@ } }, "node_modules/@lhci/cli": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.11.0.tgz", - "integrity": "sha512-5P0yvctSuriCPvQbos8VThk2DsPG/9LHzI+c6DD1hSAXTdiQJB3GDbz6BO6J/5fCEofA5OGOgyAhGWCTaN7SnA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.11.1.tgz", + "integrity": "sha512-NDq7Cd6cfINLuI88FSQt+hZ1RSRyOi4TFOO9MVip4BHtSm+BG83sYRGMllUoBt12N6F+5UQte58A9sJz65EI1g==", "dev": true, "dependencies": { - "@lhci/utils": "0.11.0", + "@lhci/utils": "0.11.1", "chrome-launcher": "^0.13.4", "compression": "^1.7.4", "debug": "^4.3.1", @@ -1494,9 +1494,9 @@ } }, "node_modules/@lhci/utils": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.11.0.tgz", - "integrity": "sha512-kG1a6X83GemLyU9UbxpcdQIikiT4SWJabpyB73C5Iz+6SwjcQXBY8+2VpLhFKtkU9o+FZyc826Ikj7tRHnd2cQ==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.11.1.tgz", + "integrity": "sha512-ABUp+AFLRdfQ3+nTDinGxZAz4afBMjEoC1g9GlL5b9Faa9eC90fcmv4uS5V+jcQWFMYjbYpsajHIJfI6r6OIjA==", "dev": true, "dependencies": { "debug": "^4.3.1", @@ -1815,9 +1815,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.1.tgz", - "integrity": "sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", + "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", "dev": true, "funding": { "type": "github", @@ -1825,12 +1825,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.1.tgz", - "integrity": "sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", + "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", "dev": true, "dependencies": { - "@tanstack/query-core": "4.29.1", + "@tanstack/query-core": "4.29.5", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -1852,9 +1852,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.1.tgz", - "integrity": "sha512-lbtNGArplXLVmY8eEh8LFqZz61PJI38sASEcuKoSnEK8UgWvLCwY5vjlT8fzk10yQ4jhR3+PHKLDMXA5ifCTXw==", + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.6.tgz", + "integrity": "sha512-qpYI41a69MWmrllcGiSE1KlpmnwJY/w0yKMnmp6VXn7nVy0i5TMMAT4u8D48F1Ipv/BKIDI1lqxPAvB4MqryBg==", "dev": true, "dependencies": { "@tanstack/match-sorter-utils": "^8.7.0", @@ -1866,7 +1866,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "4.29.1", + "@tanstack/react-query": "4.29.5", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -2127,9 +2127,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", + "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", @@ -2175,9 +2175,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.192", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz", - "integrity": "sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==", + "version": "4.14.194", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", + "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", "dev": true }, "node_modules/@types/lodash.mergewith": { @@ -2196,9 +2196,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "version": "18.16.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", + "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==", "dev": true }, "node_modules/@types/parse-json": { @@ -2214,9 +2214,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.57", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz", - "integrity": "sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg==", + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -2225,9 +2225,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.1.tgz", + "integrity": "sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==", "dev": true, "dependencies": { "@types/react": "*" @@ -2429,6 +2429,19 @@ "deep-equal": "^2.0.5" } }, + "node_modules/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, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -3184,9 +3197,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.0.tgz", - "integrity": "sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", "dev": true, "hasInstallScript": true, "funding": { @@ -3364,16 +3377,17 @@ } }, "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "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.2", - "get-intrinsic": "^1.1.3", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.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", @@ -3381,7 +3395,7 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", @@ -5170,12 +5184,12 @@ "dev": true }, "node_modules/js-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", - "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/js-levenshtein": { @@ -5244,9 +5258,9 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", + "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" @@ -5360,9 +5374,9 @@ "dev": true }, "node_modules/lighthouse/node_modules/chrome-launcher": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", - "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -5495,9 +5509,9 @@ } }, "node_modules/lighthouse/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -5999,9 +6013,9 @@ } }, "node_modules/msw/node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -6060,9 +6074,9 @@ } }, "node_modules/msw/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -7185,14 +7199,14 @@ "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -7694,15 +7708,15 @@ "dev": true }, "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.4.tgz", + "integrity": "sha512-USf5pszRYwuE6hg9by0OkKChkQYEXfkeTtm0xKw+jqQhwyjCVLdYyMBK7R+n7dhzsblAWJnGxju4vxq5eH20GQ==", "dev": true }, "node_modules/superjson": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.2.tgz", - "integrity": "sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.3.tgz", + "integrity": "sha512-0j+U70KUtP8+roVPbwfqkyQI7lBt7ETnuA7KXbTDX3mCKiD/4fXs2ldKSMdt0MCfpTwiMxo20yFU3vu6ewETpQ==", "dev": true, "dependencies": { "copy-anything": "^3.0.2" @@ -8146,9 +8160,9 @@ } }, "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "node_modules/which-typed-array": { @@ -8406,9 +8420,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", "dev": true }, "@babel/helper-validator-identifier": { @@ -8487,18 +8501,18 @@ } }, "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, "requires": { "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz", + "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==", "dev": true, "requires": { "core-js-pure": "^3.25.1", @@ -8506,12 +8520,12 @@ } }, "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } @@ -9204,9 +9218,9 @@ "dev": true }, "@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", + "integrity": "sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", @@ -9219,20 +9233,20 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "@emotion/cache": { - "version": "11.10.7", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.7.tgz", - "integrity": "sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.8.tgz", + "integrity": "sha512-5fyqGHi51LU95o7qQ/vD1jyvC4uCY5GcBT+UgP4LHdpO9jPDlXqhrRr9/wCKmfoAvh5G/F7aOh4MwQa+8uEqhA==", "dev": true, "requires": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.1", "@emotion/utils": "^1.2.0", "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "@emotion/hash": { @@ -9257,14 +9271,14 @@ "dev": true }, "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.8.tgz", + "integrity": "sha512-ZfGfiABtJ1P1OXqOBsW08EgCDp5fK6C5I8hUJauc/VcJBGSzqAirMnFslhFWnZJ/w5HxPI36XbvMV0l4KZHl+w==", "dev": true, "requires": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", + "@emotion/babel-plugin": "^11.10.8", + "@emotion/cache": "^11.10.8", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0", @@ -9292,13 +9306,13 @@ "dev": true }, "@emotion/styled": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", - "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.8.tgz", + "integrity": "sha512-gow0lF4Uw/QEdX2REMhI8v6wLOabPKJ+4HKNF0xdJ2DJdznN6fxaXpQOx6sNkyBhSUL558Rmcu1Lq/MYlVo4vw==", "dev": true, "requires": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", + "@emotion/babel-plugin": "^11.10.8", "@emotion/is-prop-valid": "^1.2.0", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", @@ -9331,9 +9345,9 @@ "dev": true }, "@formatjs/cli": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.0.4.tgz", - "integrity": "sha512-ivb+uUcYmHnffBkXM7OM4NDofxyfnVvW5G52p+M9Cg3DGMz3wVBm3TwW3SXgGGTft7CMWHeGQGXjxTOwBYKeEA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.1.0.tgz", + "integrity": "sha512-A05diK7zr8LEw4KFrtJfDhIa5PNHHcdM4wSEsgLqU/KqzcT4Jf6RhgU6RExe7UBpvKKl51Q/j2JpPRlretDXcQ==", "dev": true, "requires": {} }, @@ -9470,12 +9484,12 @@ } }, "@lhci/cli": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.11.0.tgz", - "integrity": "sha512-5P0yvctSuriCPvQbos8VThk2DsPG/9LHzI+c6DD1hSAXTdiQJB3GDbz6BO6J/5fCEofA5OGOgyAhGWCTaN7SnA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.11.1.tgz", + "integrity": "sha512-NDq7Cd6cfINLuI88FSQt+hZ1RSRyOi4TFOO9MVip4BHtSm+BG83sYRGMllUoBt12N6F+5UQte58A9sJz65EI1g==", "dev": true, "requires": { - "@lhci/utils": "0.11.0", + "@lhci/utils": "0.11.1", "chrome-launcher": "^0.13.4", "compression": "^1.7.4", "debug": "^4.3.1", @@ -9493,9 +9507,9 @@ } }, "@lhci/utils": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.11.0.tgz", - "integrity": "sha512-kG1a6X83GemLyU9UbxpcdQIikiT4SWJabpyB73C5Iz+6SwjcQXBY8+2VpLhFKtkU9o+FZyc826Ikj7tRHnd2cQ==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.11.1.tgz", + "integrity": "sha512-ABUp+AFLRdfQ3+nTDinGxZAz4afBMjEoC1g9GlL5b9Faa9eC90fcmv4uS5V+jcQWFMYjbYpsajHIJfI6r6OIjA==", "dev": true, "requires": { "debug": "^4.3.1", @@ -9760,25 +9774,25 @@ } }, "@tanstack/query-core": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.1.tgz", - "integrity": "sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.5.tgz", + "integrity": "sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==", "dev": true }, "@tanstack/react-query": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.1.tgz", - "integrity": "sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.5.tgz", + "integrity": "sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==", "dev": true, "requires": { - "@tanstack/query-core": "4.29.1", + "@tanstack/query-core": "4.29.5", "use-sync-external-store": "^1.2.0" } }, "@tanstack/react-query-devtools": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.1.tgz", - "integrity": "sha512-lbtNGArplXLVmY8eEh8LFqZz61PJI38sASEcuKoSnEK8UgWvLCwY5vjlT8fzk10yQ4jhR3+PHKLDMXA5ifCTXw==", + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.6.tgz", + "integrity": "sha512-qpYI41a69MWmrllcGiSE1KlpmnwJY/w0yKMnmp6VXn7nVy0i5TMMAT4u8D48F1Ipv/BKIDI1lqxPAvB4MqryBg==", "dev": true, "requires": { "@tanstack/match-sorter-utils": "^8.7.0", @@ -9993,9 +10007,9 @@ } }, "@types/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", + "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", @@ -10034,9 +10048,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.192", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz", - "integrity": "sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==", + "version": "4.14.194", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", + "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", "dev": true }, "@types/lodash.mergewith": { @@ -10055,9 +10069,9 @@ "dev": true }, "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "version": "18.16.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", + "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==", "dev": true }, "@types/parse-json": { @@ -10073,9 +10087,9 @@ "dev": true }, "@types/react": { - "version": "17.0.57", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz", - "integrity": "sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg==", + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", "dev": true, "requires": { "@types/prop-types": "*", @@ -10084,9 +10098,9 @@ } }, "@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.1.tgz", + "integrity": "sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==", "dev": true, "requires": { "@types/react": "*" @@ -10258,6 +10272,16 @@ "deep-equal": "^2.0.5" } }, + "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-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -10831,9 +10855,9 @@ } }, "core-js-pure": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.0.tgz", - "integrity": "sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", "dev": true }, "cosmiconfig": { @@ -10967,16 +10991,17 @@ "dev": true }, "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "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.2", - "get-intrinsic": "^1.1.3", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.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", @@ -10984,7 +11009,7 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", @@ -12349,9 +12374,9 @@ "dev": true }, "js-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", - "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true }, "js-levenshtein": { @@ -12407,9 +12432,9 @@ }, "dependencies": { "semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", + "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" @@ -12480,9 +12505,9 @@ }, "dependencies": { "chrome-launcher": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", - "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, "requires": { "@types/node": "*", @@ -12582,9 +12607,9 @@ "dev": true }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -12989,9 +13014,9 @@ } }, "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -13035,9 +13060,9 @@ "dev": true }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -13872,14 +13897,14 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, "remove-accents": { @@ -14281,15 +14306,15 @@ } }, "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.4.tgz", + "integrity": "sha512-USf5pszRYwuE6hg9by0OkKChkQYEXfkeTtm0xKw+jqQhwyjCVLdYyMBK7R+n7dhzsblAWJnGxju4vxq5eH20GQ==", "dev": true }, "superjson": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.2.tgz", - "integrity": "sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.3.tgz", + "integrity": "sha512-0j+U70KUtP8+roVPbwfqkyQI7lBt7ETnuA7KXbTDX3mCKiD/4fXs2ldKSMdt0MCfpTwiMxo20yFU3vu6ewETpQ==", "dev": true, "requires": { "copy-anything": "^3.0.2" @@ -14641,9 +14666,9 @@ } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "which-typed-array": { diff --git a/packages/template-retail-react-app/package.json b/packages/template-retail-react-app/package.json index a62e28d4c0..e4f93aea6c 100644 --- a/packages/template-retail-react-app/package.json +++ b/packages/template-retail-react-app/package.json @@ -51,7 +51,6 @@ "card-validator": "^8.1.1", "commerce-sdk-react-preview": "^2.8.0-dev", "cross-env": "^5.2.1", - "cross-fetch": "^3.1.5", "focus-visible": "^5.2.0", "framer-motion": "^3.10.6", "full-icu": "^1.5.0", From 3f978a8b8b6a26b30a9fa0a49b364b683618d545 Mon Sep 17 00:00:00 2001 From: CC ProdSec <65211003+cc-prodsec@users.noreply.github.com> Date: Mon, 1 May 2023 17:23:24 -0400 Subject: [PATCH 4/6] [Snyk] Security upgrade cosmiconfig from 7.1.0 to 8.0.0 (#1145) * fix: packages/pwa-kit-runtime/package.json & packages/pwa-kit-runtime/package-lock.json to reduce vulnerabilities The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-YAML-5458867 * add change to package-lock.json * Lockfile changes --------- Co-authored-by: snyk-bot Co-authored-by: Brian Feister Co-authored-by: vcua-mobify <47404250+vcua-mobify@users.noreply.github.com> Co-authored-by: vcua-mobify --- packages/pwa-kit-runtime/package-lock.json | 81 ++++++++++--------- packages/pwa-kit-runtime/package.json | 2 +- .../package-lock.json | 1 - 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/packages/pwa-kit-runtime/package-lock.json b/packages/pwa-kit-runtime/package-lock.json index e0f28dddbf..f99d7c60fa 100644 --- a/packages/pwa-kit-runtime/package-lock.json +++ b/packages/pwa-kit-runtime/package-lock.json @@ -12,7 +12,7 @@ "@loadable/babel-plugin": "^5.15.3", "aws-sdk": "^2.1340.0", "aws-serverless-express": "3.4.0", - "cosmiconfig": "^7.1.0", + "cosmiconfig": "^8.0.0", "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", @@ -554,11 +554,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, "node_modules/@vendia/serverless-express": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-3.4.0.tgz", @@ -613,6 +608,11 @@ "node": ">= 8" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1016,18 +1016,20 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", "dependencies": { - "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, "node_modules/cross-env": { @@ -1736,6 +1738,17 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -2991,14 +3004,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "peer": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } } }, "dependencies": { @@ -3394,11 +3399,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, "@vendia/serverless-express": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-3.4.0.tgz", @@ -3441,6 +3441,11 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -3740,15 +3745,14 @@ "dev": true }, "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", "requires": { - "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "path-type": "^4.0.0" } }, "cross-env": { @@ -4275,6 +4279,14 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5244,11 +5256,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "peer": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" } } } diff --git a/packages/pwa-kit-runtime/package.json b/packages/pwa-kit-runtime/package.json index 1ac006b443..7b0b983a20 100644 --- a/packages/pwa-kit-runtime/package.json +++ b/packages/pwa-kit-runtime/package.json @@ -33,7 +33,7 @@ "@loadable/babel-plugin": "^5.15.3", "aws-sdk": "^2.1340.0", "aws-serverless-express": "3.4.0", - "cosmiconfig": "^7.1.0", + "cosmiconfig": "^8.0.0", "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", diff --git a/packages/template-retail-react-app/package-lock.json b/packages/template-retail-react-app/package-lock.json index 85b00dbb5d..157876aaf3 100644 --- a/packages/template-retail-react-app/package-lock.json +++ b/packages/template-retail-react-app/package-lock.json @@ -30,7 +30,6 @@ "bundlesize2": "^0.0.31", "card-validator": "^8.1.1", "cross-env": "^5.2.1", - "cross-fetch": "^3.1.5", "focus-visible": "^5.2.0", "framer-motion": "^3.10.6", "full-icu": "^1.5.0", From 3f6d553e4332b19ca9075e92676bc332936c505d Mon Sep 17 00:00:00 2001 From: vcua-mobify <47404250+vcua-mobify@users.noreply.github.com> Date: Thu, 4 May 2023 13:57:22 -0700 Subject: [PATCH 5/6] Dependency updates (#1170) --- packages/pwa-kit-runtime/package-lock.json | 4 ++-- packages/pwa-kit-runtime/package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/pwa-kit-runtime/package-lock.json b/packages/pwa-kit-runtime/package-lock.json index f99d7c60fa..0e40c7097b 100644 --- a/packages/pwa-kit-runtime/package-lock.json +++ b/packages/pwa-kit-runtime/package-lock.json @@ -10,9 +10,9 @@ "license": "SEE LICENSE IN LICENSE", "dependencies": { "@loadable/babel-plugin": "^5.15.3", - "aws-sdk": "^2.1340.0", + "aws-sdk": "^2.1354.0", "aws-serverless-express": "3.4.0", - "cosmiconfig": "^8.0.0", + "cosmiconfig": "^8.1.3", "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", diff --git a/packages/pwa-kit-runtime/package.json b/packages/pwa-kit-runtime/package.json index 7b0b983a20..a1d3606fe9 100644 --- a/packages/pwa-kit-runtime/package.json +++ b/packages/pwa-kit-runtime/package.json @@ -31,9 +31,9 @@ }, "dependencies": { "@loadable/babel-plugin": "^5.15.3", - "aws-sdk": "^2.1340.0", + "aws-sdk": "^2.1354.0", "aws-serverless-express": "3.4.0", - "cosmiconfig": "^8.0.0", + "cosmiconfig": "^8.1.3", "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", From 9e4f23db9234af24a45aeb8637734f568f4568dd Mon Sep 17 00:00:00 2001 From: Joel Uong <88680517+joeluong-sfcc@users.noreply.github.com> Date: Fri, 5 May 2023 12:12:38 -0400 Subject: [PATCH 6/6] fix: remove device-context and detect-device-type (#1168) * remove device-context and detect-device-type * remove ua-parser-js dependency * Update changelog --- packages/pwa-kit-react-sdk/CHANGELOG.md | 2 + .../src/ssr/browser/main.jsx | 19 ++- .../src/ssr/server/react-rendering.js | 36 ++---- .../src/ssr/server/react-rendering.test.js | 21 +--- .../src/ssr/universal/device-context.js | 9 -- packages/pwa-kit-runtime/CHANGELOG.md | 2 + packages/pwa-kit-runtime/package-lock.json | 24 ---- packages/pwa-kit-runtime/package.json | 1 - .../pwa-kit-runtime/src/ssr/server/express.js | 21 +--- .../src/ssr/server/express.test.js | 46 ------- .../pwa-kit-runtime/src/utils/ssr-server.js | 1 - .../src/utils/ssr-server.test.js | 115 +----------------- .../utils/ssr-server/detect-device-type.js | 51 -------- 13 files changed, 25 insertions(+), 323 deletions(-) delete mode 100644 packages/pwa-kit-react-sdk/src/ssr/universal/device-context.js delete mode 100644 packages/pwa-kit-runtime/src/utils/ssr-server/detect-device-type.js diff --git a/packages/pwa-kit-react-sdk/CHANGELOG.md b/packages/pwa-kit-react-sdk/CHANGELOG.md index 2c3b5bd447..186ab005ec 100644 --- a/packages/pwa-kit-react-sdk/CHANGELOG.md +++ b/packages/pwa-kit-react-sdk/CHANGELOG.md @@ -1,4 +1,6 @@ ## 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) + ## v2.7.0 (Mar 03, 2023) ## v2.6.0 (Jan 25, 2023) 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 bdcd7dcc28..ac650475cd 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx +++ b/packages/pwa-kit-react-sdk/src/ssr/browser/main.jsx @@ -8,7 +8,6 @@ import React, {useRef} from 'react' import ReactDOM from 'react-dom' import {BrowserRouter as Router} from 'react-router-dom' -import DeviceContext from '../universal/device-context' import {ServerContext, CorrelationIdProvider} from '../universal/contexts' import App from '../universal/components/_app' import {getAppConfig} from '../universal/compatibility' @@ -52,16 +51,14 @@ export const OuterApp = ({routes, error, WrappedApp, locals}) => { return uuidv4() }} > - - - - - + + + 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 993f2582d2..fec94fbc00 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 @@ -18,7 +18,6 @@ import {StaticRouter as Router, matchPath} from 'react-router-dom' import serialize from 'serialize-javascript' import {getAssetUrl} from '../universal/utils' -import DeviceContext from '../universal/device-context' import {ServerContext, CorrelationIdProvider} from '../universal/contexts' import Document from '../universal/components/_document' @@ -29,7 +28,7 @@ import {getAppConfig} from '../universal/compatibility' import Switch from '../universal/components/switch' import {getRoutes, routeComponent} from '../universal/components/route-component' import * as errors from '../universal/errors' -import {detectDeviceType, isRemote} from 'pwa-kit-runtime/utils/ssr-server' +import {isRemote} from 'pwa-kit-runtime/utils/ssr-server' import {proxyConfigs} from 'pwa-kit-runtime/utils/ssr-shared' import {getConfig} from 'pwa-kit-runtime/utils/ssr-config' import sprite from 'svg-sprite-loader/runtime/sprite.build' @@ -116,7 +115,6 @@ export const render = async (req, res, next) => { const component = await route.component.getComponent() // Step 3 - Init the app state - const deviceType = detectDeviceType(req) const props = { error: null, appState: {}, @@ -125,8 +123,7 @@ export const render = async (req, res, next) => { res, App: WrappedApp, routes, - location, - deviceType + location } let appJSX = @@ -167,8 +164,7 @@ export const render = async (req, res, next) => { res, location, config, - appJSX, - deviceType + appJSX }) } catch (e) { // This is an unrecoverable error. @@ -192,17 +188,7 @@ export const render = async (req, res, next) => { } } -const OuterApp = ({ - req, - res, - error, - App, - appState, - routes, - routerContext, - location, - deviceType -}) => { +const OuterApp = ({req, res, error, App, appState, routes, routerContext, location}) => { const AppConfig = getAppConfig() return ( @@ -211,11 +197,9 @@ const OuterApp = ({ correlationId={res.locals.requestId} resetOnPageChange={false} > - - - - - + + + @@ -230,15 +214,14 @@ OuterApp.propTypes = { appState: PropTypes.object, routes: PropTypes.array, routerContext: PropTypes.object, - location: PropTypes.object, - deviceType: PropTypes.string + location: PropTypes.object } const renderToString = (jsx, extractor) => ReactDOMServer.renderToString(extractor.collectChunks(jsx)) const renderApp = (args) => { - const {req, res, appStateError, appJSX, appState, config, deviceType} = args + const {req, res, appStateError, appJSX, appState, config} = args const extractor = new ChunkExtractor({statsFile: BUNDLES_PATH, publicPath: getAssetUrl()}) const ssrOnly = 'mobify_server_only' in req.query || '__server_only' in req.query @@ -300,7 +283,6 @@ const renderApp = (args) => { const windowGlobals = { __INITIAL_CORRELATION_ID__: res.locals.requestId, __CONFIG__: config, - __DEVICE_TYPE__: deviceType, __PRELOADED_STATE__: appState, __ERROR__: error, // `window.Progressive` has a long history at Mobify and some diff --git a/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.test.js b/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.test.js index 1f7857641d..b6f7481750 100644 --- a/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.test.js +++ b/packages/pwa-kit-react-sdk/src/ssr/server/react-rendering.test.js @@ -39,11 +39,6 @@ const opts = (overrides = {}) => { } } -const mobile = - 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3' -const tablet = - 'Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25' - jest.mock('../universal/compatibility', () => { const AppConfig = jest.requireActual('../universal/components/_app-config').default const {withReactQuery} = jest.requireActual('../universal/components/with-react-query') @@ -433,10 +428,8 @@ describe('The Node SSR Environment', () => { console.error(html) const doc = parse(html) const include = ['
This is a PWA
'] - const data = dataFromHTML(doc) const dataScript = doc.querySelectorAll('script[id=mobify-data]')[0] expect(dataScript.innerHTML.split(/\r\n|\r|\n/)).toHaveLength(1) - expect(data.__DEVICE_TYPE__).toBe('DESKTOP') include.forEach((s) => expect(html).toEqual(expect.stringContaining(s))) expect(scriptsAreSafe(doc)).toBe(true) } @@ -444,17 +437,12 @@ describe('The Node SSR Environment', () => { { description: `rendering PWA's for tablet`, req: { - url: '/pwa/', - headers: { - 'User-Agent': tablet - } + url: '/pwa/' }, assertions: (res) => { expect(res.statusCode).toBe(200) const html = res.text const doc = parse(html) - const data = dataFromHTML(doc) - expect(data.__DEVICE_TYPE__).toBe('TABLET') const include = ['
This is a PWA
'] include.forEach((s) => expect(html).toEqual(expect.stringContaining(s))) expect(scriptsAreSafe(doc)).toBe(true) @@ -463,17 +451,12 @@ describe('The Node SSR Environment', () => { { description: `rendering PWA's for mobile`, req: { - url: '/pwa/', - headers: { - 'User-Agent': mobile - } + url: '/pwa/' }, assertions: (res) => { expect(res.statusCode).toBe(200) const html = res.text const doc = parse(html) - const data = dataFromHTML(doc) - expect(data.__DEVICE_TYPE__).toBe('PHONE') const include = ['
This is a PWA
'] include.forEach((s) => expect(html).toEqual(expect.stringContaining(s))) expect(scriptsAreSafe(doc)).toBe(true) diff --git a/packages/pwa-kit-react-sdk/src/ssr/universal/device-context.js b/packages/pwa-kit-react-sdk/src/ssr/universal/device-context.js deleted file mode 100644 index dcece9703c..0000000000 --- a/packages/pwa-kit-react-sdk/src/ssr/universal/device-context.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) 2022, Salesforce, 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' -export default React.createContext() diff --git a/packages/pwa-kit-runtime/CHANGELOG.md b/packages/pwa-kit-runtime/CHANGELOG.md index c2a118f456..01ff6e094b 100644 --- a/packages/pwa-kit-runtime/CHANGELOG.md +++ b/packages/pwa-kit-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ ## 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) + ## v2.7.0 (Mar 03, 2023) - Support Node 16 [#965](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/965) diff --git a/packages/pwa-kit-runtime/package-lock.json b/packages/pwa-kit-runtime/package-lock.json index 0e40c7097b..1cfc065482 100644 --- a/packages/pwa-kit-runtime/package-lock.json +++ b/packages/pwa-kit-runtime/package-lock.json @@ -21,7 +21,6 @@ "morgan": "^1.10.0", "semver": "^7.3.8", "set-cookie-parser": "^2.6.0", - "ua-parser-js": "^1.0.34", "whatwg-encoding": "^1.0.5" }, "devDependencies": { @@ -2816,24 +2815,6 @@ "node": ">= 0.6" } }, - "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -5128,11 +5109,6 @@ "mime-types": "~2.1.24" } }, - "ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==" - }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", diff --git a/packages/pwa-kit-runtime/package.json b/packages/pwa-kit-runtime/package.json index a1d3606fe9..b1e67e8e3c 100644 --- a/packages/pwa-kit-runtime/package.json +++ b/packages/pwa-kit-runtime/package.json @@ -42,7 +42,6 @@ "morgan": "^1.10.0", "semver": "^7.3.8", "set-cookie-parser": "^2.6.0", - "ua-parser-js": "^1.0.34", "whatwg-encoding": "^1.0.5" }, "devDependencies": { diff --git a/packages/pwa-kit-runtime/src/ssr/server/express.js b/packages/pwa-kit-runtime/src/ssr/server/express.js index fe70ace375..414e50c69d 100644 --- a/packages/pwa-kit-runtime/src/ssr/server/express.js +++ b/packages/pwa-kit-runtime/src/ssr/server/express.js @@ -17,8 +17,7 @@ import { parseCacheControl, parseEndParameters, isRemote, - wrapResponseWrite, - detectDeviceType + wrapResponseWrite } from '../../utils/ssr-server' import {CONTENT_ENCODING, X_MOBIFY_FROM_CACHE} from './constants' import {X_MOBIFY_REQUEST_CLASS} from '../../utils/ssr-proxying' @@ -53,18 +52,6 @@ export const RESOLVED_PROMISE = Promise.resolve() * appropriate to include these, the caller should add their values * (or values based on them) to the options.extras array. * - * Requests that come to a deployed Express app contain headers that - * identify the device type. By default, this method generates different - * cache keys for different device types (effectively, the values of the - * headers used by getBrowserSize are included in 'options.extras'). To - * suppress this, pass true for options.ignoreDeviceType - * Note: CloudFront will pass 4 device type headers, and ALL of them will - * be present in the request headers, they are 'CloudFront-Is-Desktop-Viewer', - * 'CloudFront-Is-Mobile-Viewer', 'CloudFront-Is-SmartTV-Viewer' and - * 'CloudFront-Is-Tablet-Viewer'. The values can be 'true' or 'false', and it - * is possible that a device falls into more than one device type category - * and multiple device type headers can be 'true' at the same time. - * * By default, method will generate different cache keys for requests with * different request classes (effectively, the value of the request-class * string is included in 'extras'). To suppress this, pass true for @@ -74,8 +61,6 @@ export const RESOLVED_PROMISE = Promise.resolve() * @param [options] {Object} values that affect the cache key generation. * @param [options.extras] {Array} extra string values * to be included in the key. - * @param [options.ignoreDeviceType] {Boolean} set this to true to suppress - * automatic variation of the key by device type. * @param [options.ignoreRequestClass] {Boolean} set this to true to suppress * automatic variation of the key by request class. * @returns {String} the generated key. @@ -99,10 +84,6 @@ export const generateCacheKey = (req, options = {}) => { elements.push(...filteredQueryStrings) } - if (!options.ignoreDeviceType) { - elements.push(`device=${detectDeviceType(req)}`) - } - if (!options.ignoreRequestClass) { const requestClass = req.get(X_MOBIFY_REQUEST_CLASS) if (requestClass) { diff --git a/packages/pwa-kit-runtime/src/ssr/server/express.test.js b/packages/pwa-kit-runtime/src/ssr/server/express.test.js index 4cd547c699..d93f5bf9af 100644 --- a/packages/pwa-kit-runtime/src/ssr/server/express.test.js +++ b/packages/pwa-kit-runtime/src/ssr/server/express.test.js @@ -878,52 +878,6 @@ describe('generateCacheKey', () => { expect(generateCacheKey(mockRequest({url: '/test3?a=2'}))).not.toEqual(result1) }) - test('user agent affects key', () => { - const result1 = generateCacheKey(mockRequest()) - const request2 = mockRequest({ - headers: { - 'user-agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' - } - }) - expect(generateCacheKey(request2)).not.toEqual(result1) - // query string and device type is hashed - expect(generateCacheKey(request2)).toBe( - `/test/${getHashForString(['a=1', 'device=PHONE'].join('-'))}` - ) - }) - - test('CloudFront device headers affect key', () => { - const result1 = generateCacheKey(mockRequest()) - const request2 = mockRequest({ - headers: { - 'CloudFront-Is-Desktop-Viewer': 'false', - 'CloudFront-Is-Mobile-Viewer': 'true', - 'CloudFront-Is-SmartTV-Viewer': 'false', - 'CloudFront-Is-Tablet-Viewer': 'false' - } - }) - expect(generateCacheKey(request2)).not.toEqual(result1) - expect(generateCacheKey(request2)).toBe( - `/test/${getHashForString(['a=1', 'device=PHONE'].join('-'))}` - ) - }) - - test('multiple CloudFront device headers affect key', () => { - const request1 = mockRequest({ - headers: { - 'CloudFront-Is-Desktop-Viewer': 'false', - 'CloudFront-Is-Mobile-Viewer': 'true', - 'CloudFront-Is-SmartTV-Viewer': 'false', - 'CloudFront-Is-Tablet-Viewer': 'true' - } - }) - - expect(generateCacheKey(request1)).toBe( - `/test/${getHashForString(['a=1', 'device=TABLET'].join('-'))}` - ) - }) - test('request class affects key', () => { const result1 = generateCacheKey(mockRequest()) const request2 = mockRequest({ diff --git a/packages/pwa-kit-runtime/src/utils/ssr-server.js b/packages/pwa-kit-runtime/src/utils/ssr-server.js index b7302194fd..f7e7337cd2 100644 --- a/packages/pwa-kit-runtime/src/utils/ssr-server.js +++ b/packages/pwa-kit-runtime/src/utils/ssr-server.js @@ -12,7 +12,6 @@ // This file is kept for backwards compatibility / simpler imports. export * from './ssr-server/cached-response' export * from './ssr-server/configure-proxy' -export * from './ssr-server/detect-device-type' export * from './ssr-server/metrics-sender' export * from './ssr-server/outgoing-request-hook' export * from './ssr-server/parse-end-parameters' diff --git a/packages/pwa-kit-runtime/src/utils/ssr-server.test.js b/packages/pwa-kit-runtime/src/utils/ssr-server.test.js index 8c7155366d..31eb70492b 100644 --- a/packages/pwa-kit-runtime/src/utils/ssr-server.test.js +++ b/packages/pwa-kit-runtime/src/utils/ssr-server.test.js @@ -26,11 +26,7 @@ import { processExpressResponse, processLambdaResponse, updateGlobalAgentOptions, - wrapResponseWrite, - detectDeviceType, - DESKTOP, - PHONE, - TABLET + wrapResponseWrite } from './ssr-server' import { @@ -72,47 +68,6 @@ const baseMobify = { } } -const userAgents = { - phone: { - iphone5orSE: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1', - iphone6or7or8: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - iphone6or7or8plus: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - iphoneX: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - nexus4: 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36', - nexus5: 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36', - nexus6: 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36', - galaxyS5: - 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36', - pixel2: 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36', - pixel2XL: - 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Mobile Safari/537.36' - }, - tablet: { - nexus7: 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Safari/537.36', - nexus10: - 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Safari/537.36', - ipad: 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', - ipadAir: - 'Mozilla/5.0 (iPad; CPU OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1', - ipadPro: - 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1' - }, - desktop: { - chrome72: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3598.0 Safari/537.36', - firefox63: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:63.0) Gecko/20100101 Firefox/63.0', - safari11: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15', - edge17: 'Mozilla/5.0 (Windows NT 10.0; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134', - ie11: 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko' - } -} - let consoleLog let consoleWarn let consoleError @@ -367,74 +322,6 @@ describe('utils/ssr-server tests', () => { }) ) }) - - describe('detectDeviceType', () => { - const tests = [ - // Test all mobile user agents - ...Object.keys(userAgents.phone).map((key) => ({ - name: `test for user agent key ${key}`, - headers: {'user-agent': userAgents.phone[key]}, - expected: PHONE - })), - - // Test all tablet user agents - ...Object.keys(userAgents.tablet).map((key) => ({ - name: `test for user agent key ${key}`, - headers: {'user-agent': userAgents.tablet[key]}, - expected: TABLET - })), - - // Test all desktop user agents - ...Object.keys(userAgents.desktop).map((key) => ({ - name: `test for user agent key ${key}`, - headers: {'user-agent': userAgents.desktop[key]}, - expected: DESKTOP - })), - { - name: 'iphone CloudFront header', - headers: { - 'CloudFront-Is-Mobile-Viewer': 'true' - }, - expected: PHONE - }, - { - name: 'ipad CloudFront header', - headers: { - 'CloudFront-Is-Mobile-Viewer': 'true', // Tablets are also mobile devices - 'CloudFront-Is-Tablet-Viewer': 'true' - }, - expected: TABLET - }, - { - name: 'desktop CloudFront header', - headers: { - 'CloudFront-Is-Desktop-Viewer': 'true' - }, - expected: DESKTOP - } - ] - - tests.forEach((testConfig) => { - test(`detectDeviceTypes (${testConfig.name})`, () => { - const req = { - get: (key) => testConfig.headers[key], - query: {} - } - expect(detectDeviceType(req)).toEqual(testConfig.expected) - }) - }) - - test('should allow users to force a device type, using the "mobify_devicetype" query param', () => { - const headers = {'user-agent': userAgents.phone.iphoneX} - const req = { - get: (key) => headers[key], - query: { - mobify_devicetype: TABLET - } - } - expect(detectDeviceType(req)).toEqual(TABLET) - }) - }) }) describe('utils/ssr-shared tests', () => { diff --git a/packages/pwa-kit-runtime/src/utils/ssr-server/detect-device-type.js b/packages/pwa-kit-runtime/src/utils/ssr-server/detect-device-type.js deleted file mode 100644 index 230a1449f4..0000000000 --- a/packages/pwa-kit-runtime/src/utils/ssr-server/detect-device-type.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2022, Salesforce, 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 UserAgentParser from 'ua-parser-js' - -const MOBIFY_DEVICETYPE = 'mobify_devicetype' - -export const DESKTOP = 'DESKTOP' -export const PHONE = 'PHONE' -export const TABLET = 'TABLET' - -export const detectDeviceType = (request) => { - const forced = request.query[MOBIFY_DEVICETYPE] - if (forced && [DESKTOP, PHONE, TABLET].includes(forced.toUpperCase())) { - return forced - } - - const cfMobile = `CloudFront-Is-${'Mobile'}-Viewer` - const cfTablet = `CloudFront-Is-${'Tablet'}-Viewer` - const cfDesktop = `CloudFront-Is-${'Desktop'}-Viewer` - - const useCloudfront = [cfMobile, cfTablet, cfDesktop].some( - (header) => request.get(header) !== undefined - ) - - if (useCloudfront) { - // CloudFront takes precedence, if any header was set. - if (request.get(cfTablet) === 'true') { - return TABLET - } else if (request.get(cfMobile) === 'true') { - return PHONE - } else { - return DESKTOP - } - } else { - // Fall back to user-agent - const device = new UserAgentParser(request.get('user-agent')).getDevice() - const type = device && device.type - switch (type) { - case 'mobile': - return PHONE - case 'tablet': - return TABLET - default: - return DESKTOP - } - } -}