From 531a0ff937aaabec8b10a35cfe238fa9a82f827b Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 9 Nov 2022 13:20:17 +0100 Subject: [PATCH] Configure Jest for TypeScript (#12167) --- .eslintrc | 12 + package-lock.json | 3612 ++++------------- package.json | 21 +- .../myStories/header/storyStatusToggle.js | 2 +- packages/dashboard/tsconfig.json | 2 +- packages/date/src/formatTime.ts | 2 +- packages/date/src/settings.ts | 2 +- ...FormatString.js => convertFormatString.ts} | 3 +- .../date/src/test/{format.js => format.ts} | 0 .../src/test/{formatDate.js => formatDate.ts} | 4 +- .../src/test/{formatTime.js => formatTime.ts} | 0 ...splayDate.js => getRelativeDisplayDate.ts} | 8 +- ...TimeZoneString.js => getTimeZoneString.ts} | 5 - .../src/test/{is12Hour.js => is12Hour.ts} | 0 .../src/test/{toUTCDate.js => toUTCDate.ts} | 0 .../src/components/dialog/index.js | 17 +- .../keyboard/gridview/useGridViewKeys.js | 3 +- .../src/components/tooltip/index.js | 1 - .../src/test/{escapeHTML.js => escapeHTML.ts} | 0 ...etElementOrigin.js => getElementOrigin.ts} | 0 packages/elements/tsconfig.json | 3 +- .../test/{curatedFonts.js => curatedFonts.ts} | 5 +- .../{transformNode.js => transformNode.tsx} | 9 +- ...iveList.js => translateToExclusiveList.ts} | 16 +- ...iveList.js => translateToInclusiveList.ts} | 17 +- ...eWithMarkup.js => translateWithMarkup.tsx} | 13 +- packages/i18n/src/translateWithMarkup.tsx | 37 +- packages/media/src/calculateSrcSet.ts | 5 +- packages/media/src/createResource.ts | 3 +- packages/media/src/getMsFromHMS.ts | 2 +- packages/media/src/getResourceSize.ts | 10 +- packages/media/src/mimeTypes.ts | 2 +- packages/media/src/resourceList.ts | 11 +- ...{calculateSrcSet.js => calculateSrcSet.ts} | 293 +- .../{formatMsToHMS.js => formatMsToHMS.ts} | 0 ...{getFileBasename.js => getFileBasename.ts} | 0 .../test/{getMsFromHMS.js => getMsFromHMS.ts} | 0 ...{getResourceSize.js => getResourceSize.ts} | 0 .../media/src/test/getSmallestUrlForWidth.js | 93 - .../media/src/test/getSmallestUrlForWidth.ts | 189 + ...gthDisplay.js => getVideoLengthDisplay.ts} | 16 +- .../{isAnimatedGif.js => isAnimatedGif.ts} | 0 .../src/test/{mimeTypes.js => mimeTypes.ts} | 0 .../test/{resourceList.js => resourceList.ts} | 8 +- packages/media/src/types.ts | 7 +- ...EventsDragging.js => areEventsDragging.ts} | 12 +- .../test/{convertToCSS.js => convertToCSS.ts} | 21 +- .../test/{createSolid.js => createSolid.ts} | 0 ...FromString.js => createSolidFromString.ts} | 0 ...ternStyles.js => generatePatternStyles.ts} | 27 +- ...{getHexFromValue.js => getHexFromValue.ts} | 5 - ...etOpaquePattern.js => getOpaquePattern.ts} | 23 +- .../{getPreviewText.js => getPreviewText.ts} | 14 +- ...{getSolidFromHex.js => getSolidFromHex.ts} | 0 .../src/test/{hasOpacity.js => hasOpacity.ts} | 22 +- packages/react/src/renderToStaticMarkup.ts | 6 +- .../src/typings/{index.d.ts => global.d.ts} | 0 .../index.d.ts} | 0 .../formatters/test/{_utils.js => _utils.ts} | 4 +- .../formatters/test/{color.js => color.tsx} | 44 +- .../formatters/test/{italic.js => italic.tsx} | 53 +- .../{letterSpacing.js => letterSpacing.tsx} | 51 +- .../test/{underline.js => underline.tsx} | 51 +- .../test/{uppercase.js => uppercase.tsx} | 51 +- .../formatters/test/{weight.js => weight.tsx} | 82 +- packages/rich-text/src/formatters/weight.ts | 4 +- packages/rich-text/src/styleManipulation.ts | 23 +- ...{getFontVariants.js => getFontVariants.ts} | 2 +- ...{getPastedBlocks.js => getPastedBlocks.ts} | 4 +- ...leManipulation.js => styleManipulation.ts} | 60 +- packages/rich-text/src/types.ts | 4 +- packages/rich-text/src/typings/jest.d.ts | 30 + packages/stickers/tsconfig.json | 2 +- .../app/media/utils/getResourceFromMedia3p.js | 1 - packages/tracking/src/shared.ts | 2 +- ...{disableTracking.js => disableTracking.ts} | 0 .../{enableTracking.js => enableTracking.ts} | 0 .../{getTimeTracker.js => getTimeTracker.ts} | 6 +- .../tracking/src/test/{gtag.js => gtag.ts} | 4 +- ...alizeTracking.js => initializeTracking.ts} | 2 +- ...rackingEnabled.js => isTrackingEnabled.ts} | 0 .../src/test/{trackError.js => trackError.ts} | 8 +- .../src/test/{trackEvent.js => trackEvent.ts} | 52 +- ...{trackScreenView.js => trackScreenView.ts} | 8 +- .../test/{trackTiming.js => trackTiming.ts} | 6 +- packages/tracking/src/track.ts | 2 +- packages/units/src/getBoundRect.ts | 4 +- .../test/{getBoundRect.js => getBoundRect.ts} | 6 + .../units/src/test/{range.js => range.ts} | 0 packages/url/src/addQueryArgs.ts | 2 +- .../test/{addQueryArgs.js => addQueryArgs.ts} | 0 packages/url/src/test/{url.js => url.ts} | 0 packages/wp-dashboard/src/api/taxonomies.js | 1 - .../api/utils/getResourceFromAttachment.js | 7 +- .../src/api/utils/normalizeResourceSizes.js} | 44 +- .../api/utils}/test/normalizeResourceSizes.js | 53 + ...nakeToCamelCase.js => snakeToCamelCase.ts} | 41 +- patches/@types+draft-js+0.11.9.patch | 27 + tests/js/jest.config.js | 7 +- tsconfig.json | 2 +- tsconfig.shared.json | 6 +- 101 files changed, 1730 insertions(+), 3589 deletions(-) rename packages/date/src/test/{convertFormatString.js => convertFormatString.ts} (97%) rename packages/date/src/test/{format.js => format.ts} (100%) rename packages/date/src/test/{formatDate.js => formatDate.ts} (96%) rename packages/date/src/test/{formatTime.js => formatTime.ts} (100%) rename packages/date/src/test/{getRelativeDisplayDate.js => getRelativeDisplayDate.ts} (96%) rename packages/date/src/test/{getTimeZoneString.js => getTimeZoneString.ts} (93%) rename packages/date/src/test/{is12Hour.js => is12Hour.ts} (100%) rename packages/date/src/test/{toUTCDate.js => toUTCDate.ts} (100%) rename packages/dom/src/test/{escapeHTML.js => escapeHTML.ts} (100%) rename packages/elements/src/utils/test/{getElementOrigin.js => getElementOrigin.ts} (100%) rename packages/fonts/src/test/{curatedFonts.js => curatedFonts.ts} (93%) rename packages/i18n/src/test/{transformNode.js => transformNode.tsx} (92%) rename packages/i18n/src/test/{translateToExclusiveList.js => translateToExclusiveList.ts} (65%) rename packages/i18n/src/test/{translateToInclusiveList.js => translateToInclusiveList.ts} (65%) rename packages/i18n/src/test/{translateWithMarkup.js => translateWithMarkup.tsx} (94%) rename packages/media/src/test/{calculateSrcSet.js => calculateSrcSet.ts} (54%) rename packages/media/src/test/{formatMsToHMS.js => formatMsToHMS.ts} (100%) rename packages/media/src/test/{getFileBasename.js => getFileBasename.ts} (100%) rename packages/media/src/test/{getMsFromHMS.js => getMsFromHMS.ts} (100%) rename packages/media/src/test/{getResourceSize.js => getResourceSize.ts} (100%) delete mode 100644 packages/media/src/test/getSmallestUrlForWidth.js create mode 100644 packages/media/src/test/getSmallestUrlForWidth.ts rename packages/media/src/test/{getVideoLengthDisplay.js => getVideoLengthDisplay.ts} (67%) rename packages/media/src/test/{isAnimatedGif.js => isAnimatedGif.ts} (100%) rename packages/media/src/test/{mimeTypes.js => mimeTypes.ts} (100%) rename packages/media/src/test/{resourceList.js => resourceList.ts} (89%) rename packages/moveable/src/test/{areEventsDragging.js => areEventsDragging.ts} (84%) rename packages/patterns/src/test/{convertToCSS.js => convertToCSS.ts} (70%) rename packages/patterns/src/test/{createSolid.js => createSolid.ts} (100%) rename packages/patterns/src/test/{createSolidFromString.js => createSolidFromString.ts} (100%) rename packages/patterns/src/test/{generatePatternStyles.js => generatePatternStyles.ts} (94%) rename packages/patterns/src/test/{getHexFromValue.js => getHexFromValue.ts} (95%) rename packages/patterns/src/test/{getOpaquePattern.js => getOpaquePattern.ts} (72%) rename packages/patterns/src/test/{getPreviewText.js => getPreviewText.ts} (80%) rename packages/patterns/src/test/{getSolidFromHex.js => getSolidFromHex.ts} (100%) rename packages/patterns/src/test/{hasOpacity.js => hasOpacity.ts} (73%) rename packages/react/src/typings/{index.d.ts => global.d.ts} (100%) rename packages/react/src/typings/{shallow-equal.d.ts => shallow-equal/index.d.ts} (100%) rename packages/rich-text/src/formatters/test/{_utils.js => _utils.ts} (87%) rename packages/rich-text/src/formatters/test/{color.js => color.tsx} (78%) rename packages/rich-text/src/formatters/test/{italic.js => italic.tsx} (75%) rename packages/rich-text/src/formatters/test/{letterSpacing.js => letterSpacing.tsx} (76%) rename packages/rich-text/src/formatters/test/{underline.js => underline.tsx} (76%) rename packages/rich-text/src/formatters/test/{uppercase.js => uppercase.tsx} (76%) rename packages/rich-text/src/formatters/test/{weight.js => weight.tsx} (74%) rename packages/rich-text/src/test/{getFontVariants.js => getFontVariants.ts} (96%) rename packages/rich-text/src/test/{getPastedBlocks.js => getPastedBlocks.ts} (97%) rename packages/rich-text/src/test/{styleManipulation.js => styleManipulation.ts} (88%) create mode 100644 packages/rich-text/src/typings/jest.d.ts rename packages/tracking/src/test/{disableTracking.js => disableTracking.ts} (100%) rename packages/tracking/src/test/{enableTracking.js => enableTracking.ts} (100%) rename packages/tracking/src/test/{getTimeTracker.js => getTimeTracker.ts} (93%) rename packages/tracking/src/test/{gtag.js => gtag.ts} (94%) rename packages/tracking/src/test/{initializeTracking.js => initializeTracking.ts} (96%) rename packages/tracking/src/test/{isTrackingEnabled.js => isTrackingEnabled.ts} (100%) rename packages/tracking/src/test/{trackError.js => trackError.ts} (85%) rename packages/tracking/src/test/{trackEvent.js => trackEvent.ts} (74%) rename packages/tracking/src/test/{trackScreenView.js => trackScreenView.ts} (85%) rename packages/tracking/src/test/{trackTiming.js => trackTiming.ts} (91%) rename packages/units/src/test/{getBoundRect.js => getBoundRect.ts} (95%) rename packages/units/src/test/{range.js => range.ts} (100%) rename packages/url/src/test/{addQueryArgs.js => addQueryArgs.ts} (100%) rename packages/url/src/test/{url.js => url.ts} (100%) rename packages/{media/src/normalizeResourceSizes.ts => wp-story-editor/src/api/utils/normalizeResourceSizes.js} (52%) rename packages/{media/src => wp-story-editor/src/api/utils}/test/normalizeResourceSizes.js (55%) rename packages/wp-utils/src/test/{snakeToCamelCase.js => snakeToCamelCase.ts} (68%) create mode 100644 patches/@types+draft-js+0.11.9.patch diff --git a/.eslintrc b/.eslintrc index 502792ee30ee..b6a637a06df6 100644 --- a/.eslintrc +++ b/.eslintrc @@ -386,7 +386,9 @@ "files": [ "__mocks__/**/*.js", "**/test/**/*.js", + "**/test/**/*.ts", "**/testUtils/**/*.js", + "**/testUtils/**/*.ts", "tests/js/**/*.js" ], "excludedFiles": [ @@ -430,6 +432,16 @@ "testing-library/no-dom-import": "error" } }, + { + "files": [ + "**/test/**/*.ts", + "**/testUtils/**/*.ts" + ], + "rules": { + "@typescript-eslint/unbound-method": "off", + "jest/unbound-method": "error" + } + }, { "files": [ "__mocks__/**/*.js" diff --git a/package-lock.json b/package-lock.json index b7cb2d03af15..7deaa563fcec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "license": "Apache-2.0", "devDependencies": { "@ampproject/toolbox-optimizer": "^2.9.0", - "@babel/core": "^7.19.3", + "@babel/core": "^7.19.6", "@babel/eslint-parser": "^7.19.1", "@babel/eslint-plugin": "^7.19.1", - "@babel/preset-env": "^7.19.3", + "@babel/preset-env": "^7.19.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@googleforcreators/dashboard": "*", @@ -22,13 +22,14 @@ "@googleforcreators/migration": "*", "@googleforcreators/moveable": "*", "@googleforcreators/story-editor": "*", + "@jest/types": "^29.0.1", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", - "@percy/cli": "^1.10.4", + "@percy/cli": "^1.12.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.8", "@prettier/plugin-xml": "^2.2.0", - "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-babel": "^6.0.2", "@rollup/plugin-commonjs": "^23.0.2", - "@rollup/plugin-dynamic-import-vars": "^1.4.4", + "@rollup/plugin-dynamic-import-vars": "^2.0.1", "@rollup/plugin-json": "^5.0.1", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", @@ -54,6 +55,12 @@ "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.4.3", + "@types/eslint": "^8.4.6", + "@types/eslint-scope": "^3.7.4", + "@types/estree": "^1.0.0", + "@types/jest": "^29.0.0", + "@types/jsdom": "^20.0.0", + "@types/node": "^18.11.6", "@types/styled-components": "^5.1.26", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.42.0", @@ -99,7 +106,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-security": "^1.5.0", "eslint-plugin-styled-components-a11y": "^1.0.0", - "eslint-plugin-testing-library": "^5.7.2", + "eslint-plugin-testing-library": "^5.9.1", "glob": "^8.0.3", "html-webpack-plugin": "^5.3.2", "husky": "^8.0.1", @@ -153,7 +160,7 @@ "terser-webpack-plugin": "^5.3.6", "typescript": "^4.8.4", "webpack": "^5.74.0", - "webpack-bundle-analyzer": "^4.6.1", + "webpack-bundle-analyzer": "^4.7.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1", "webpackbar": "^5.0.2", @@ -2990,30 +2997,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/console/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3107,35 +3090,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/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==" - }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3218,30 +3172,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/core/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3395,35 +3325,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/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==" - }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3747,22 +3648,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/globals/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -3771,14 +3656,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/globals/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3885,35 +3762,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/globals/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==" - }, "node_modules/@jest/globals/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3992,30 +3840,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/reporters/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4203,35 +4027,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/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==" - }, "node_modules/@jest/reporters/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4301,94 +4096,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/test-result/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/test-result/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/test-result/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/test-result/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/test-result/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/test-result/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/test-sequencer": { "version": "29.2.2", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.2.2.tgz", @@ -4403,30 +4110,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/test-sequencer/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4598,6 +4281,31 @@ "node": ">= 10.14.2" } }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4678,26 +4386,25 @@ } }, "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", + "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", "dependencies": { + "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": ">= 10.14.2" + "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" }, @@ -4712,7 +4419,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4728,7 +4434,6 @@ "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" }, @@ -4739,14 +4444,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" } @@ -4755,7 +4458,6 @@ "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" }, @@ -5195,20 +4897,20 @@ } }, "node_modules/@percy/cli": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.10.4.tgz", - "integrity": "sha512-9ETHx9pcPwnSD6GiMIC895q/K+sdg8U17qbAJeQlgBbVXONrq+Q6MpUtDOifObgWJurOKFwZMxrRop3Kf+ad3w==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.13.0.tgz", + "integrity": "sha512-yVeFZjFhGMUopJnEgLLi5pgwlsRkD2mcaRXO3bG2Kwu/BamOEpjPitxWrGscZrjxkFM6vFGeGmb4v0h3YWbbrw==", "dev": true, "dependencies": { - "@percy/cli-app": "1.10.4", - "@percy/cli-build": "1.10.4", - "@percy/cli-command": "1.10.4", - "@percy/cli-config": "1.10.4", - "@percy/cli-exec": "1.10.4", - "@percy/cli-snapshot": "1.10.4", - "@percy/cli-upload": "1.10.4", - "@percy/client": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/cli-app": "1.13.0", + "@percy/cli-build": "1.13.0", + "@percy/cli-command": "1.13.0", + "@percy/cli-config": "1.13.0", + "@percy/cli-exec": "1.13.0", + "@percy/cli-snapshot": "1.13.0", + "@percy/cli-upload": "1.13.0", + "@percy/client": "1.13.0", + "@percy/logger": "1.13.0" }, "bin": { "percy": "bin/run.cjs" @@ -5218,39 +4920,39 @@ } }, "node_modules/@percy/cli-app": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.10.4.tgz", - "integrity": "sha512-sJq9KZVyq4kz3ePVBSCgBfhJJvTZnXq2IoMSylOY9QTzqWJW94p/ZR9Yi91QiitkeGy6fbz5vFn3L62GZk5Jgw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.13.0.tgz", + "integrity": "sha512-Z5a5SmhYbvdGaO9lO7zdJEv3Z/uZ6iS63OTK4PbKZYYXgZJ0NIOvIrYwBF7UdCbipoDrsvFAgYlJtaPMqBrQXQ==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4", - "@percy/cli-exec": "1.10.4" + "@percy/cli-command": "1.13.0", + "@percy/cli-exec": "1.13.0" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-build": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.10.4.tgz", - "integrity": "sha512-qGyI10VXzP3U84JhLJrq9rgKUEKbDkz0QHUUUEXVbc1ToKtNKoOrE3uAjsEja/2Rhx4HXrdOoRHEZkJXvP/pmw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.13.0.tgz", + "integrity": "sha512-2sUGQJ2+XKafkXC2lsooXXmPnf+zy3VUAGWcSCvE/1k7Le2bOx/rU9nnC3PRTzHbwbLvWlnXZZs8fn7KzZIpfQ==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4" + "@percy/cli-command": "1.13.0" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-command": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.10.4.tgz", - "integrity": "sha512-P72TRdyi7mWWEOfcJ4tdDXTqz3dnzO7R/jOurfwj//gB2TSyTjLCy2GBud0sJ79dwVGIxpysGbNtH6XnK+ExIg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.13.0.tgz", + "integrity": "sha512-gnzaUXI/cj+PzCTpJuQ95wdxSCgzKPLHFQOZ/Xk5rzjZ5oDqL0H/X7marZIbkF66eWJ8o6dxuxRMkqFWAGW2HQ==", "dev": true, "dependencies": { - "@percy/config": "1.10.4", - "@percy/core": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/config": "1.13.0", + "@percy/core": "1.13.0", + "@percy/logger": "1.13.0" }, "bin": { "percy-cli-readme": "bin/readme.js" @@ -5260,24 +4962,24 @@ } }, "node_modules/@percy/cli-config": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.10.4.tgz", - "integrity": "sha512-H37ANVPN105VfrQA+fYP4V6WhEUVnrABUKnZ4OdGs7+sr/j1vM0qTkDg0DzWAU7+AMF2gvkCfHNxVC3VJe6nNg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.13.0.tgz", + "integrity": "sha512-Kl3x7eFwPtGZJ6u9TA5Z0lrB9E1HJez1iDOQ6Poq5wEYN9I47n2y6qQeCewgjW8GOSCwu8wx25zNZ4QtfqhRzA==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4" + "@percy/cli-command": "1.13.0" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-exec": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.10.4.tgz", - "integrity": "sha512-fsV2Gb6OO132Gmnxxd65RY5cqdhT7672Q3lQtfGqyJySmzYx4Q2g7QIacbA8uEHTFQwT7DPFGC0/biYeYOXKbQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.13.0.tgz", + "integrity": "sha512-3i8qGANvjlTQLeob8ypDVRvtJha0xHSBNMeBrR0N+b97EKJsZSiZfIz0dC3BL/U3CEx2KenAErY6ZH0GqFKftQ==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "cross-spawn": "^7.0.3", "which": "^2.0.2" }, @@ -5286,12 +4988,12 @@ } }, "node_modules/@percy/cli-snapshot": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.10.4.tgz", - "integrity": "sha512-q1pzBqJHnQZ2a2n44D8QyUFKuE7peQS9Ov70FG3YqtxpNXFaHBLLqNJ2ZZbi2c/BpvmriugXnbOh6Omvf930cQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.13.0.tgz", + "integrity": "sha512-bmPlLCmfFkBqyIuXkOk2m2pvw+LjaypqDToeiMw2eJ3ZcbA4NZjH+uRiFK6/Q6hX8N3rwSxStTrzSI1M+ZLL+g==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "yaml": "^2.0.0" }, "engines": { @@ -5299,21 +5001,21 @@ } }, "node_modules/@percy/cli-snapshot/node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/@percy/cli-upload": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.10.4.tgz", - "integrity": "sha512-5ZU3J0HeKQ5HXK8F4OFDn/SgRMqNuNS9XHOHPV4tPnXKM6ui4jDMVaywOUQ1qCLYoOeFeX5lafHx923ZZoyioA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.13.0.tgz", + "integrity": "sha512-WuHyvBvRvbhP6Dj1HLbnKlFvEbrr6oMXzmXFVBZ/GEFy0/jEpnw7ylQaGu0W8L54RWAIF3yUeoOMLW7OHi+JlQ==", "dev": true, "dependencies": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "fast-glob": "^3.2.11", "image-size": "^1.0.0" }, @@ -5322,25 +5024,25 @@ } }, "node_modules/@percy/client": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.10.4.tgz", - "integrity": "sha512-TQq4TOL86cXZUoLhz4mje0OAvQtxjNZIpYLvhJ5ekOdFrBuU5xXVegXjAQRTN90SokPT80/lPfRVwQgsaBaXSw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.13.0.tgz", + "integrity": "sha512-8y4W8enXDOEW6GrhpTjOaPyvU5Nv6OVufHNEs8G7zobqyEE5fyPW57qO4DQ48he5u0o5JIcSNHdp5+qq7Og/SA==", "dev": true, "dependencies": { - "@percy/env": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/env": "1.13.0", + "@percy/logger": "1.13.0" }, "engines": { "node": ">=14" } }, "node_modules/@percy/config": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.10.4.tgz", - "integrity": "sha512-K0p4fKE77jsXWaNJIOP61IbGaA4KHbGXuqchHrFAsxh8HsdzadntFsTkXxtyS6eu6v4kfeLo0j25Mq6xkgQ5gQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.13.0.tgz", + "integrity": "sha512-g+9R/YmuhxNRsyoctzfRqo2LG/rmFmx+Dcm3Q0OEdZtzEkMB/PX5onv4HeRj04K3yN7X2uCi0xtZ0y5FH3WR4Q==", "dev": true, "dependencies": { - "@percy/logger": "1.10.4", + "@percy/logger": "1.13.0", "ajv": "^8.6.2", "cosmiconfig": "^7.0.0", "yaml": "^2.0.0" @@ -5372,25 +5074,25 @@ "dev": true }, "node_modules/@percy/config/node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/@percy/core": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.10.4.tgz", - "integrity": "sha512-7Fu9h6XjMNjJF0RDft0GQ6A3uo1SQip+x8yp1oTF3K4qoKywc28EnfPyGeQ83Jju40cu1z6VzjnvnyIWK3/B6Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.13.0.tgz", + "integrity": "sha512-tXxtOY7TeA/4OaRTv1I4bq/10G/1ITzgPRNRQNF8lUkBw1e6nEfdmiKqRUwbywnlh8pd0uDnvL3ufIrJfvX8dQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@percy/client": "1.10.4", - "@percy/config": "1.10.4", - "@percy/dom": "1.10.4", - "@percy/logger": "1.10.4", + "@percy/client": "1.13.0", + "@percy/config": "1.13.0", + "@percy/dom": "1.13.0", + "@percy/logger": "1.13.0", "content-disposition": "^0.5.4", "cross-spawn": "^7.0.3", "extract-zip": "^2.0.1", @@ -5412,9 +5114,9 @@ "dev": true }, "node_modules/@percy/core/node_modules/ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -5433,24 +5135,24 @@ } }, "node_modules/@percy/dom": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.10.4.tgz", - "integrity": "sha512-EevExMWUKvBFe2UvXuskJCoj8Xc28PeX60ktSRvc7Z68wSQZmE2hlu8mfnkQ6KSDyO96duBPrKWJn9EeYFvIWg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.13.0.tgz", + "integrity": "sha512-lmTGE3YSHYvMCAuxFOgSgd4kwFgijNTa6AThB93BrMISh/mM7nT7yn9Z8HjkO+Cjdc+OXEEqvfNRICBXbrJLNQ==", "dev": true }, "node_modules/@percy/env": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.10.4.tgz", - "integrity": "sha512-11xPV2/yNga+2RZnTkleIdcpqqb4WGNUBhdjMds/45YQJXX1ZbtzGi8eU/UPEHYCeY7L6IZlatIyaE50wZg/Jw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.13.0.tgz", + "integrity": "sha512-oc5B957QSumXnbFsMY1icja34PM6wK1CLJZgDjgsnGFos/1yn1QCG0oyPLbMj+7ZESvLhVHbPqhfCrFB0rTjRQ==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@percy/logger": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.10.4.tgz", - "integrity": "sha512-8rUE5hhwIRoPAdA3Osh4+dkVbXE6q4Pn7xyt63NLoFHt9JR2H/iFowsaetkCCHa6VKKfGMjXm04hmrP2o0vUWw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.13.0.tgz", + "integrity": "sha512-JwBl7ZYgu4TR50f7k81gRqah8kNCvlvcI7t9kyt7fjW2vSagYfgezh3XK7BToopiE4Qst6sFF2E11xxzIympsA==", "dev": true, "engines": { "node": ">=14" @@ -5714,25 +5416,28 @@ } }, "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0" }, "peerDependenciesMeta": { "@types/babel__core": { "optional": true + }, + "rollup": { + "optional": true } } }, @@ -5761,15 +5466,16 @@ } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "node_modules/@rollup/plugin-dynamic-import-vars": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-dynamic-import-vars/-/plugin-dynamic-import-vars-2.0.1.tgz", + "integrity": "sha512-//rFVnJhZqR1Bje7n9ZMlmX9M62AExcLVXmbTcq80CqFx97C6CXaghLYsPzcZ7w8JhbVdjBIRADyLNel0HHorg==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0", + "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "fast-glob": "^3.2.12", + "magic-string": "^0.26.4" }, "engines": { "node": ">=14.0.0" @@ -5783,67 +5489,6 @@ } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-dynamic-import-vars": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-dynamic-import-vars/-/plugin-dynamic-import-vars-1.4.4.tgz", - "integrity": "sha512-51BcU6ag9EeF09CtEsa5D/IHYo7KI42TR1Jc4doNzV1nHAiH7TvUi5vsLERFMjs9Gzy9K0otbZH/2wb0hpBhRA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "estree-walker": "^2.0.1", - "fast-glob": "^3.2.7", - "magic-string": "^0.25.7" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-dynamic-import-vars/node_modules/@rollup/pluginutils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", - "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/plugin-dynamic-import-vars/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-json": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-5.0.1.tgz", @@ -5864,40 +5509,6 @@ } } }, - "node_modules/@rollup/plugin-json/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-json/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/plugin-json/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", @@ -5923,40 +5534,6 @@ } } }, - "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-typescript": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-9.0.2.tgz", @@ -5983,40 +5560,6 @@ } } }, - "node_modules/@rollup/plugin-typescript/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-typescript/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/plugin-typescript/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-url": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-url/-/plugin-url-8.0.1.tgz", @@ -6039,40 +5582,6 @@ } } }, - "node_modules/@rollup/plugin-url/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-url/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/plugin-url/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-url/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6110,20 +5619,25 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@scena/dragscroll": { @@ -7000,6 +6514,12 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, + "node_modules/@storybook/builder-webpack4/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -8330,6 +7850,12 @@ } } }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -8784,6 +8310,12 @@ } } }, + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/core-common/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -9799,6 +9331,12 @@ "lodash": "^4.17.15" } }, + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/core-server/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -10722,6 +10260,12 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, + "node_modules/@storybook/manager-webpack4/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -12121,6 +11665,12 @@ } } }, + "node_modules/@storybook/manager-webpack5/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/manager-webpack5/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12755,6 +12305,12 @@ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "node_modules/@storybook/react/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -13409,12 +12965,6 @@ "node": ">= 8.0.0" } }, - "node_modules/@svgr/rollup/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@svgr/webpack": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", @@ -13928,9 +13478,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -13938,9 +13488,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -13948,9 +13498,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "node_modules/@types/express": { @@ -14070,13 +13620,13 @@ } }, "node_modules/@types/jest": { - "version": "26.0.20", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz", - "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==", + "version": "29.2.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.2.tgz", + "integrity": "sha512-og1wAmdxKoS71K2ZwSVqWPX6OVn3ihZ6ZT2qvZvZQm90lJVDyXIjYcu4Khx2CNIeaFv12rOU/YObOsI3VOkzog==", "dev": true, "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/jsdom": { @@ -14173,9 +13723,9 @@ "integrity": "sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA==" }, "node_modules/@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "node_modules/@types/node-fetch": { "version": "2.6.2", @@ -14464,10 +14014,9 @@ } }, "node_modules/@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "dev": true, + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dependencies": { "@types/yargs-parser": "*" } @@ -17563,30 +17112,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/babel-jest/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20759,32 +20284,6 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/@jest/types": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", - "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/css-minimizer-webpack-plugin/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", @@ -21969,15 +21468,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -23809,9 +23299,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.7.2.tgz", - "integrity": "sha512-0ZmHeR/DUUgEzW8rwUBRWxuqntipDtpvxK0hymdHnLlABryJkzd+CAHr+XnISaVsTisZ5MLHp6nQF+8COHLLTA==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", + "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.13.0" @@ -24428,9 +23918,9 @@ } }, "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "node_modules/esutils": { @@ -24703,30 +24193,6 @@ "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-6.1.1.tgz", "integrity": "sha512-cnQF96qdoEcOD63j5NQMc0RtW9WRMW/WHKXEKsuDQ2tszhVH3qC7zkXXS4D0LTt9qCB3DEExioqylsQXvqPrUw==" }, - "node_modules/expect/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/expect/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/expect/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24864,35 +24330,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/expect/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/expect/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/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==" - }, "node_modules/expect/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29396,22 +28833,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-circus/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -29420,14 +28841,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29592,35 +29005,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/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==" - }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29665,30 +29049,6 @@ } } }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-cli/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29912,22 +29272,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-config/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -29936,14 +29280,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -30118,35 +29454,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/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==" - }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30236,91 +29543,6 @@ "node": ">=8" } }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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-diff/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "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-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/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-docblock": { "version": "29.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", @@ -30347,30 +29569,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-each/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -30453,35 +29651,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/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==" - }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30552,23 +29721,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-environment-jsdom/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -30578,15 +29730,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -30702,38 +29845,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-jsdom/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-environment-jsdom/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-environment-jsdom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -31044,35 +30155,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-extended/node_modules/pretty-format": { - "version": "29.0.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", - "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-extended/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==" - }, "node_modules/jest-extended/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -31094,15 +30176,6 @@ "promise-polyfill": "^8.1.3" } }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/jest-haste-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", @@ -31130,6 +30203,101 @@ "fsevents": "^2.1.2" } }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/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-haste-map/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-haste-map/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-haste-map/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-haste-map/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-haste-map/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-json-schema": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jest-json-schema/-/jest-json-schema-6.1.0.tgz", @@ -31240,17 +30408,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-leak-detector/node_modules/jest-get-type": { "version": "29.2.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", @@ -31259,24 +30416,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-leak-detector/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==" - }, "node_modules/jest-matcher-deep-close-to": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/jest-matcher-deep-close-to/-/jest-matcher-deep-close-to-3.0.2.tgz", @@ -31893,30 +31032,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-resolve/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -32148,22 +31263,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-runner/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -32172,14 +31271,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -32376,35 +31467,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/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==" - }, "node_modules/jest-runner/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -32532,22 +31594,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-runtime/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -32556,14 +31602,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -32749,35 +31787,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/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==" - }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -32953,30 +31962,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-snapshot/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -33174,35 +32159,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/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==" - }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -33272,6 +32228,31 @@ "node": ">= 10.14.2" } }, + "node_modules/jest-util/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "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", @@ -33358,30 +32339,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-validate/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -33443,35 +32400,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/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==" - }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -33501,30 +32429,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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-watcher/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -33645,94 +32549,6 @@ "node": ">=8" } }, - "node_modules/jest/node_modules/@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@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/node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -35227,12 +34043,15 @@ } }, "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" } }, "node_modules/make-dir": { @@ -39255,52 +38074,33 @@ } }, "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", + "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/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" - }, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/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/pretty-format/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/pretty-format/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==" }, "node_modules/pretty-hrtime": { "version": "1.0.3", @@ -45971,9 +44771,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", - "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", + "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", "dev": true, "dependencies": { "acorn": "^8.0.4", @@ -47879,66 +46679,6 @@ "npm": ">= 7.3" } }, - "packages/migration/node_modules/@rollup/plugin-babel": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", - "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "packages/migration/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "packages/migration/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "packages/migration/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "packages/migration/node_modules/rollup": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.3.tgz", @@ -48061,7 +46801,7 @@ "@googleforcreators/patterns": "*", "@googleforcreators/react": "*", "draft-js": "^0.11.7", - "draft-js-export-html": "git+ssh://git@github.com/swissspidy/draft-js-export-html.git#366642f1c6e5090f24f7a66a357328115e4a6a62", + "draft-js-export-html": "https://github.com/swissspidy/draft-js-export-html", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^3.0.1", "immutable": "^4.1.0", @@ -48189,8 +46929,8 @@ "classnames": "^2.3.2", "colorthief": "^2.3.2", "draft-js": "^0.11.7", - "draft-js-export-html": "git+ssh://git@github.com/swissspidy/draft-js-export-html.git#366642f1c6e5090f24f7a66a357328115e4a6a62", - "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git", + "draft-js-export-html": "https://github.com/swissspidy/draft-js-export-html", + "draft-js-import-element": "https://github.com/swissspidy/draft-js-import-element", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^3.0.1", "flagged": "^2.0.6", @@ -50586,39 +49326,6 @@ "uuid": "^9.0.0" }, "dependencies": { - "@rollup/plugin-babel": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", - "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "rollup": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.3.tgz", @@ -50699,7 +49406,7 @@ "@testing-library/react": "^12.1.5", "@types/draft-js": "^0.11.9", "draft-js": "^0.11.7", - "draft-js-export-html": "git+ssh://git@github.com/swissspidy/draft-js-export-html.git#366642f1c6e5090f24f7a66a357328115e4a6a62", + "draft-js-export-html": "https://github.com/swissspidy/draft-js-export-html", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^3.0.1", "immutable": "^4.1.0", @@ -50764,8 +49471,8 @@ "classnames": "^2.3.2", "colorthief": "^2.3.2", "draft-js": "^0.11.7", - "draft-js-export-html": "git+ssh://git@github.com/swissspidy/draft-js-export-html.git#366642f1c6e5090f24f7a66a357328115e4a6a62", - "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git", + "draft-js-export-html": "https://github.com/swissspidy/draft-js-export-html", + "draft-js-import-element": "https://github.com/swissspidy/draft-js-import-element", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^3.0.1", "flagged": "^2.0.6", @@ -50963,27 +49670,6 @@ "slash": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -51053,28 +49739,6 @@ "picomatch": "^2.2.3" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -51142,27 +49806,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -51277,28 +49920,6 @@ } } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -51549,19 +50170,6 @@ "jest-util": "^29.2.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -51570,14 +50178,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -51657,28 +50257,6 @@ "picomatch": "^2.2.3" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -51742,27 +50320,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -51902,28 +50459,6 @@ } } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -51975,72 +50510,6 @@ "@jest/types": "^29.2.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jest/test-sequencer": { @@ -52054,27 +50523,6 @@ "slash": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -52206,6 +50654,28 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -52264,15 +50734,15 @@ } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", + "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", "requires": { + "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "dependencies": { @@ -52280,7 +50750,6 @@ "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" } @@ -52289,7 +50758,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -52299,7 +50767,6 @@ "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" } @@ -52307,20 +50774,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -52691,118 +51155,118 @@ } }, "@percy/cli": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.10.4.tgz", - "integrity": "sha512-9ETHx9pcPwnSD6GiMIC895q/K+sdg8U17qbAJeQlgBbVXONrq+Q6MpUtDOifObgWJurOKFwZMxrRop3Kf+ad3w==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.13.0.tgz", + "integrity": "sha512-yVeFZjFhGMUopJnEgLLi5pgwlsRkD2mcaRXO3bG2Kwu/BamOEpjPitxWrGscZrjxkFM6vFGeGmb4v0h3YWbbrw==", "dev": true, "requires": { - "@percy/cli-app": "1.10.4", - "@percy/cli-build": "1.10.4", - "@percy/cli-command": "1.10.4", - "@percy/cli-config": "1.10.4", - "@percy/cli-exec": "1.10.4", - "@percy/cli-snapshot": "1.10.4", - "@percy/cli-upload": "1.10.4", - "@percy/client": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/cli-app": "1.13.0", + "@percy/cli-build": "1.13.0", + "@percy/cli-command": "1.13.0", + "@percy/cli-config": "1.13.0", + "@percy/cli-exec": "1.13.0", + "@percy/cli-snapshot": "1.13.0", + "@percy/cli-upload": "1.13.0", + "@percy/client": "1.13.0", + "@percy/logger": "1.13.0" } }, "@percy/cli-app": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.10.4.tgz", - "integrity": "sha512-sJq9KZVyq4kz3ePVBSCgBfhJJvTZnXq2IoMSylOY9QTzqWJW94p/ZR9Yi91QiitkeGy6fbz5vFn3L62GZk5Jgw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.13.0.tgz", + "integrity": "sha512-Z5a5SmhYbvdGaO9lO7zdJEv3Z/uZ6iS63OTK4PbKZYYXgZJ0NIOvIrYwBF7UdCbipoDrsvFAgYlJtaPMqBrQXQ==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4", - "@percy/cli-exec": "1.10.4" + "@percy/cli-command": "1.13.0", + "@percy/cli-exec": "1.13.0" } }, "@percy/cli-build": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.10.4.tgz", - "integrity": "sha512-qGyI10VXzP3U84JhLJrq9rgKUEKbDkz0QHUUUEXVbc1ToKtNKoOrE3uAjsEja/2Rhx4HXrdOoRHEZkJXvP/pmw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.13.0.tgz", + "integrity": "sha512-2sUGQJ2+XKafkXC2lsooXXmPnf+zy3VUAGWcSCvE/1k7Le2bOx/rU9nnC3PRTzHbwbLvWlnXZZs8fn7KzZIpfQ==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4" + "@percy/cli-command": "1.13.0" } }, "@percy/cli-command": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.10.4.tgz", - "integrity": "sha512-P72TRdyi7mWWEOfcJ4tdDXTqz3dnzO7R/jOurfwj//gB2TSyTjLCy2GBud0sJ79dwVGIxpysGbNtH6XnK+ExIg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.13.0.tgz", + "integrity": "sha512-gnzaUXI/cj+PzCTpJuQ95wdxSCgzKPLHFQOZ/Xk5rzjZ5oDqL0H/X7marZIbkF66eWJ8o6dxuxRMkqFWAGW2HQ==", "dev": true, "requires": { - "@percy/config": "1.10.4", - "@percy/core": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/config": "1.13.0", + "@percy/core": "1.13.0", + "@percy/logger": "1.13.0" } }, "@percy/cli-config": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.10.4.tgz", - "integrity": "sha512-H37ANVPN105VfrQA+fYP4V6WhEUVnrABUKnZ4OdGs7+sr/j1vM0qTkDg0DzWAU7+AMF2gvkCfHNxVC3VJe6nNg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.13.0.tgz", + "integrity": "sha512-Kl3x7eFwPtGZJ6u9TA5Z0lrB9E1HJez1iDOQ6Poq5wEYN9I47n2y6qQeCewgjW8GOSCwu8wx25zNZ4QtfqhRzA==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4" + "@percy/cli-command": "1.13.0" } }, "@percy/cli-exec": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.10.4.tgz", - "integrity": "sha512-fsV2Gb6OO132Gmnxxd65RY5cqdhT7672Q3lQtfGqyJySmzYx4Q2g7QIacbA8uEHTFQwT7DPFGC0/biYeYOXKbQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.13.0.tgz", + "integrity": "sha512-3i8qGANvjlTQLeob8ypDVRvtJha0xHSBNMeBrR0N+b97EKJsZSiZfIz0dC3BL/U3CEx2KenAErY6ZH0GqFKftQ==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "cross-spawn": "^7.0.3", "which": "^2.0.2" } }, "@percy/cli-snapshot": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.10.4.tgz", - "integrity": "sha512-q1pzBqJHnQZ2a2n44D8QyUFKuE7peQS9Ov70FG3YqtxpNXFaHBLLqNJ2ZZbi2c/BpvmriugXnbOh6Omvf930cQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.13.0.tgz", + "integrity": "sha512-bmPlLCmfFkBqyIuXkOk2m2pvw+LjaypqDToeiMw2eJ3ZcbA4NZjH+uRiFK6/Q6hX8N3rwSxStTrzSI1M+ZLL+g==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "yaml": "^2.0.0" }, "dependencies": { "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true } } }, "@percy/cli-upload": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.10.4.tgz", - "integrity": "sha512-5ZU3J0HeKQ5HXK8F4OFDn/SgRMqNuNS9XHOHPV4tPnXKM6ui4jDMVaywOUQ1qCLYoOeFeX5lafHx923ZZoyioA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.13.0.tgz", + "integrity": "sha512-WuHyvBvRvbhP6Dj1HLbnKlFvEbrr6oMXzmXFVBZ/GEFy0/jEpnw7ylQaGu0W8L54RWAIF3yUeoOMLW7OHi+JlQ==", "dev": true, "requires": { - "@percy/cli-command": "1.10.4", + "@percy/cli-command": "1.13.0", "fast-glob": "^3.2.11", "image-size": "^1.0.0" } }, "@percy/client": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.10.4.tgz", - "integrity": "sha512-TQq4TOL86cXZUoLhz4mje0OAvQtxjNZIpYLvhJ5ekOdFrBuU5xXVegXjAQRTN90SokPT80/lPfRVwQgsaBaXSw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.13.0.tgz", + "integrity": "sha512-8y4W8enXDOEW6GrhpTjOaPyvU5Nv6OVufHNEs8G7zobqyEE5fyPW57qO4DQ48he5u0o5JIcSNHdp5+qq7Og/SA==", "dev": true, "requires": { - "@percy/env": "1.10.4", - "@percy/logger": "1.10.4" + "@percy/env": "1.13.0", + "@percy/logger": "1.13.0" } }, "@percy/config": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.10.4.tgz", - "integrity": "sha512-K0p4fKE77jsXWaNJIOP61IbGaA4KHbGXuqchHrFAsxh8HsdzadntFsTkXxtyS6eu6v4kfeLo0j25Mq6xkgQ5gQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.13.0.tgz", + "integrity": "sha512-g+9R/YmuhxNRsyoctzfRqo2LG/rmFmx+Dcm3Q0OEdZtzEkMB/PX5onv4HeRj04K3yN7X2uCi0xtZ0y5FH3WR4Q==", "dev": true, "requires": { - "@percy/logger": "1.10.4", + "@percy/logger": "1.13.0", "ajv": "^8.6.2", "cosmiconfig": "^7.0.0", "yaml": "^2.0.0" @@ -52827,23 +51291,23 @@ "dev": true }, "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true } } }, "@percy/core": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.10.4.tgz", - "integrity": "sha512-7Fu9h6XjMNjJF0RDft0GQ6A3uo1SQip+x8yp1oTF3K4qoKywc28EnfPyGeQ83Jju40cu1z6VzjnvnyIWK3/B6Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.13.0.tgz", + "integrity": "sha512-tXxtOY7TeA/4OaRTv1I4bq/10G/1ITzgPRNRQNF8lUkBw1e6nEfdmiKqRUwbywnlh8pd0uDnvL3ufIrJfvX8dQ==", "dev": true, "requires": { - "@percy/client": "1.10.4", - "@percy/config": "1.10.4", - "@percy/dom": "1.10.4", - "@percy/logger": "1.10.4", + "@percy/client": "1.13.0", + "@percy/config": "1.13.0", + "@percy/dom": "1.13.0", + "@percy/logger": "1.13.0", "content-disposition": "^0.5.4", "cross-spawn": "^7.0.3", "extract-zip": "^2.0.1", @@ -52862,30 +51326,30 @@ "dev": true }, "ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "requires": {} } } }, "@percy/dom": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.10.4.tgz", - "integrity": "sha512-EevExMWUKvBFe2UvXuskJCoj8Xc28PeX60ktSRvc7Z68wSQZmE2hlu8mfnkQ6KSDyO96duBPrKWJn9EeYFvIWg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.13.0.tgz", + "integrity": "sha512-lmTGE3YSHYvMCAuxFOgSgd4kwFgijNTa6AThB93BrMISh/mM7nT7yn9Z8HjkO+Cjdc+OXEEqvfNRICBXbrJLNQ==", "dev": true }, "@percy/env": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.10.4.tgz", - "integrity": "sha512-11xPV2/yNga+2RZnTkleIdcpqqb4WGNUBhdjMds/45YQJXX1ZbtzGi8eU/UPEHYCeY7L6IZlatIyaE50wZg/Jw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.13.0.tgz", + "integrity": "sha512-oc5B957QSumXnbFsMY1icja34PM6wK1CLJZgDjgsnGFos/1yn1QCG0oyPLbMj+7ZESvLhVHbPqhfCrFB0rTjRQ==", "dev": true }, "@percy/logger": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.10.4.tgz", - "integrity": "sha512-8rUE5hhwIRoPAdA3Osh4+dkVbXE6q4Pn7xyt63NLoFHt9JR2H/iFowsaetkCCHa6VKKfGMjXm04hmrP2o0vUWw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.13.0.tgz", + "integrity": "sha512-JwBl7ZYgu4TR50f7k81gRqah8kNCvlvcI7t9kyt7fjW2vSagYfgezh3XK7BToopiE4Qst6sFF2E11xxzIympsA==", "dev": true }, "@percy/puppeteer": { @@ -53051,13 +51515,13 @@ } }, "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" } }, "@rollup/plugin-commonjs": { @@ -53072,70 +51536,18 @@ "glob": "^8.0.3", "is-reference": "1.2.1", "magic-string": "^0.26.4" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } } }, "@rollup/plugin-dynamic-import-vars": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-dynamic-import-vars/-/plugin-dynamic-import-vars-1.4.4.tgz", - "integrity": "sha512-51BcU6ag9EeF09CtEsa5D/IHYo7KI42TR1Jc4doNzV1nHAiH7TvUi5vsLERFMjs9Gzy9K0otbZH/2wb0hpBhRA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-dynamic-import-vars/-/plugin-dynamic-import-vars-2.0.1.tgz", + "integrity": "sha512-//rFVnJhZqR1Bje7n9ZMlmX9M62AExcLVXmbTcq80CqFx97C6CXaghLYsPzcZ7w8JhbVdjBIRADyLNel0HHorg==", "dev": true, "requires": { - "@rollup/pluginutils": "^4.1.2", - "estree-walker": "^2.0.1", - "fast-glob": "^3.2.7", - "magic-string": "^0.25.7" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", - "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "fast-glob": "^3.2.12", + "magic-string": "^0.26.4" } }, "@rollup/plugin-json": { @@ -53145,31 +51557,6 @@ "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } } }, "@rollup/plugin-node-resolve": { @@ -53184,31 +51571,6 @@ "is-builtin-module": "^3.2.0", "is-module": "^1.0.0", "resolve": "^1.22.1" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } } }, "@rollup/plugin-typescript": { @@ -53219,31 +51581,6 @@ "requires": { "@rollup/pluginutils": "^5.0.1", "resolve": "^1.22.1" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } } }, "@rollup/plugin-url": { @@ -53257,29 +51594,6 @@ "mime": "^3.0.0" }, "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -53304,14 +51618,14 @@ } }, "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" } }, "@scena/dragscroll": { @@ -53912,6 +52226,12 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -54953,6 +53273,12 @@ "webpack-virtual-modules": "^0.4.1" }, "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -55282,6 +53608,12 @@ "webpack": "4" }, "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -56078,6 +54410,12 @@ "lodash": "^4.17.15" } }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -56828,6 +55166,12 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -57916,6 +56260,12 @@ "webpack-virtual-modules": "^0.4.1" }, "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -58316,6 +56666,12 @@ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -58787,12 +57143,6 @@ "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true } } }, @@ -59201,9 +57551,9 @@ } }, "@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "requires": { "@types/estree": "*", @@ -59211,9 +57561,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "requires": { "@types/eslint": "*", @@ -59221,9 +57571,9 @@ } }, "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "@types/express": { @@ -59343,13 +57693,13 @@ } }, "@types/jest": { - "version": "26.0.20", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz", - "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==", + "version": "29.2.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.2.tgz", + "integrity": "sha512-og1wAmdxKoS71K2ZwSVqWPX6OVn3ihZ6ZT2qvZvZQm90lJVDyXIjYcu4Khx2CNIeaFv12rOU/YObOsI3VOkzog==", "dev": true, "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "@types/jsdom": { @@ -59439,9 +57789,9 @@ "integrity": "sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA==" }, "@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/node-fetch": { "version": "2.6.2", @@ -59727,10 +58077,9 @@ } }, "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "dev": true, + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "requires": { "@types/yargs-parser": "*" } @@ -62200,27 +60549,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -64688,29 +63016,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "@jest/types": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", - "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ajv": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", @@ -65618,12 +63923,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -67233,9 +65532,9 @@ } }, "eslint-plugin-testing-library": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.7.2.tgz", - "integrity": "sha512-0ZmHeR/DUUgEzW8rwUBRWxuqntipDtpvxK0hymdHnLlABryJkzd+CAHr+XnISaVsTisZ5MLHp6nQF+8COHLLTA==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", + "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.13.0" @@ -67449,9 +65748,9 @@ } }, "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { @@ -67664,27 +65963,6 @@ "jest-util": "^29.2.1" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -67786,28 +66064,6 @@ "picomatch": "^2.2.3" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71020,72 +69276,6 @@ "@jest/types": "^29.2.1", "import-local": "^3.0.2", "jest-cli": "^29.2.2" - }, - "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-axe": { @@ -71308,19 +69498,6 @@ "jest-util": "^29.2.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -71329,14 +69506,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -71456,28 +69625,6 @@ "yocto-queue": "^0.1.0" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71507,27 +69654,6 @@ "yargs": "^17.3.1" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -71693,19 +69819,6 @@ "jest-util": "^29.2.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -71714,14 +69827,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -71848,28 +69953,6 @@ "lines-and-columns": "^1.1.6" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71939,69 +70022,6 @@ } } }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "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.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "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-docblock": { "version": "29.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", @@ -72022,27 +70042,6 @@ "pretty-format": "^29.2.1" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -72101,28 +70100,6 @@ "picomatch": "^2.2.3" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -72175,20 +70152,6 @@ "jest-util": "^29.2.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -72198,15 +70161,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -72295,31 +70249,6 @@ "picomatch": "^2.2.3" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "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", @@ -72549,28 +70478,6 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==" }, - "pretty-format": { - "version": "29.0.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz", - "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -72591,12 +70498,6 @@ "promise-polyfill": "^8.1.3" } }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, "jest-haste-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", @@ -72617,6 +70518,79 @@ "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "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-json-schema": { @@ -72700,30 +70674,10 @@ "pretty-format": "^29.2.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==" - }, "jest-get-type": { "version": "29.2.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==" - }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "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==" } } }, @@ -73168,27 +71122,6 @@ "slash": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -73387,19 +71320,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -73408,14 +71328,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -73561,28 +71473,6 @@ "yocto-queue": "^0.1.0" } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -73691,19 +71581,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -73712,14 +71589,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -73857,28 +71726,6 @@ } } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -74022,27 +71869,6 @@ "write-file-atomic": "^4.0.1" } }, - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -74189,28 +72015,6 @@ } } }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -74261,6 +72065,28 @@ "micromatch": "^4.0.2" }, "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -74325,27 +72151,6 @@ "pretty-format": "^29.2.1" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -74386,28 +72191,6 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==" }, - "pretty-format": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", - "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -74433,27 +72216,6 @@ "string-length": "^4.0.1" }, "dependencies": { - "@jest/types": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz", - "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -75677,12 +73439,12 @@ "dev": true }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -78712,40 +76474,24 @@ } }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, + "version": "29.2.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz", + "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==", "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.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" - } - }, - "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" - } + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, - "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 + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" } } }, @@ -83995,9 +81741,9 @@ } }, "webpack-bundle-analyzer": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", - "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", + "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", "dev": true, "requires": { "acorn": "^8.0.4", diff --git a/package.json b/package.json index 1abf2da73317..e7314adc540f 100644 --- a/package.json +++ b/package.json @@ -33,10 +33,10 @@ }, "devDependencies": { "@ampproject/toolbox-optimizer": "^2.9.0", - "@babel/core": "^7.19.3", + "@babel/core": "^7.19.6", "@babel/eslint-parser": "^7.19.1", "@babel/eslint-plugin": "^7.19.1", - "@babel/preset-env": "^7.19.3", + "@babel/preset-env": "^7.19.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@googleforcreators/dashboard": "*", @@ -46,13 +46,14 @@ "@googleforcreators/migration": "*", "@googleforcreators/moveable": "*", "@googleforcreators/story-editor": "*", + "@jest/types": "^29.0.1", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", - "@percy/cli": "^1.10.4", + "@percy/cli": "^1.12.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.8", "@prettier/plugin-xml": "^2.2.0", - "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-babel": "^6.0.2", "@rollup/plugin-commonjs": "^23.0.2", - "@rollup/plugin-dynamic-import-vars": "^1.4.4", + "@rollup/plugin-dynamic-import-vars": "^2.0.1", "@rollup/plugin-json": "^5.0.1", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", @@ -78,6 +79,12 @@ "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.4.3", + "@types/eslint": "^8.4.6", + "@types/eslint-scope": "^3.7.4", + "@types/estree": "^1.0.0", + "@types/jest": "^29.0.0", + "@types/jsdom": "^20.0.0", + "@types/node": "^18.11.6", "@types/styled-components": "^5.1.26", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.42.0", @@ -123,7 +130,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-security": "^1.5.0", "eslint-plugin-styled-components-a11y": "^1.0.0", - "eslint-plugin-testing-library": "^5.7.2", + "eslint-plugin-testing-library": "^5.9.1", "glob": "^8.0.3", "html-webpack-plugin": "^5.3.2", "husky": "^8.0.1", @@ -177,7 +184,7 @@ "terser-webpack-plugin": "^5.3.6", "typescript": "^4.8.4", "webpack": "^5.74.0", - "webpack-bundle-analyzer": "^4.6.1", + "webpack-bundle-analyzer": "^4.7.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1", "webpackbar": "^5.0.2", diff --git a/packages/dashboard/src/app/views/myStories/header/storyStatusToggle.js b/packages/dashboard/src/app/views/myStories/header/storyStatusToggle.js index 6f84acc54145..c75fd883562a 100644 --- a/packages/dashboard/src/app/views/myStories/header/storyStatusToggle.js +++ b/packages/dashboard/src/app/views/myStories/header/storyStatusToggle.js @@ -17,7 +17,7 @@ /** * External dependencies */ -import { useCallback, useEffect, useMemo } from 'react'; +import { useCallback, useEffect, useMemo } from '@googleforcreators/react'; import { Pill } from '@googleforcreators/design-system'; import { __, sprintf } from '@googleforcreators/i18n'; import styled from 'styled-components'; diff --git a/packages/dashboard/tsconfig.json b/packages/dashboard/tsconfig.json index 2dc1e72c3165..42aa88099156 100644 --- a/packages/dashboard/tsconfig.json +++ b/packages/dashboard/tsconfig.json @@ -11,7 +11,7 @@ { "path": "../templates" }, { "path": "../tracking" }, { "path": "../units" }, - { "path": "../i18n" }, + { "path": "../i18n" } ], "include": ["src/app/config/*", "src/types"] } diff --git a/packages/date/src/formatTime.ts b/packages/date/src/formatTime.ts index 1d2d27a1ede5..1912ce8fbd7f 100644 --- a/packages/date/src/formatTime.ts +++ b/packages/date/src/formatTime.ts @@ -26,7 +26,7 @@ import { getSettings } from './settings'; * @param date Date to format. * @return Displayable relative date string */ -function formatTime(date: Date) { +function formatTime(date: Date | string) { const settings = getSettings(); const { timeFormat } = settings; return format(date, timeFormat); diff --git a/packages/date/src/settings.ts b/packages/date/src/settings.ts index a419613e8088..c72a8c8c0f58 100644 --- a/packages/date/src/settings.ts +++ b/packages/date/src/settings.ts @@ -56,7 +56,7 @@ export function resetSettings() { * * @param newSettings Date settings. */ -export function updateSettings(newSettings: Settings) { +export function updateSettings(newSettings: Partial) { settings = { ...settings, ...newSettings, diff --git a/packages/date/src/test/convertFormatString.js b/packages/date/src/test/convertFormatString.ts similarity index 97% rename from packages/date/src/test/convertFormatString.js rename to packages/date/src/test/convertFormatString.ts index 79d110580b9c..b35feeba28d9 100644 --- a/packages/date/src/test/convertFormatString.js +++ b/packages/date/src/test/convertFormatString.ts @@ -32,7 +32,8 @@ describe('date/convertFormatString', () => { 'converts PHP date format string to its date-fns equivalent', (formatString, expectedOutput) => { const convertedWithoutSeparator = convertFormatString( - formatString + formatString, + new Date() ).replace(FORMAT_TOKEN_SEPARATOR_REGEX, ''); expect(convertedWithoutSeparator).toStrictEqual(expectedOutput); expect(() => format(new Date(), formatString)).not.toThrow(); diff --git a/packages/date/src/test/format.js b/packages/date/src/test/format.ts similarity index 100% rename from packages/date/src/test/format.js rename to packages/date/src/test/format.ts diff --git a/packages/date/src/test/formatDate.js b/packages/date/src/test/formatDate.ts similarity index 96% rename from packages/date/src/test/formatDate.js rename to packages/date/src/test/formatDate.ts index d366c0abbf29..c3e76962fc2b 100644 --- a/packages/date/src/test/formatDate.js +++ b/packages/date/src/test/formatDate.ts @@ -112,8 +112,8 @@ describe('date/formatDate', () => { expect(formattedDate).toBe('Sat 05 02 2020'); }); - it('should return an empty string with a null date', () => { - const formattedDate = formatDate(null); + it('should return an empty string when being passed an empty string', () => { + const formattedDate = formatDate(''); expect(formattedDate).toBe(''); }); diff --git a/packages/date/src/test/formatTime.js b/packages/date/src/test/formatTime.ts similarity index 100% rename from packages/date/src/test/formatTime.js rename to packages/date/src/test/formatTime.ts diff --git a/packages/date/src/test/getRelativeDisplayDate.js b/packages/date/src/test/getRelativeDisplayDate.ts similarity index 96% rename from packages/date/src/test/getRelativeDisplayDate.js rename to packages/date/src/test/getRelativeDisplayDate.ts index 14b11a5e4a6e..5ce76b16897c 100644 --- a/packages/date/src/test/getRelativeDisplayDate.js +++ b/packages/date/src/test/getRelativeDisplayDate.ts @@ -31,7 +31,7 @@ import getOptions from '../getOptions'; /** * Returns the current date in the site's timezone. * - * @return {Date} Date object. + * @return Date object. */ function getCurrentDate() { return toDate(new Date(), getOptions()); @@ -204,10 +204,4 @@ describe('date/getRelativeDisplayDate', () => { expect(formattedDate).toBe('05/02/2020'); }); - - it('should return an empty string with a null date', () => { - const formattedDate = getRelativeDisplayDate(null); - - expect(formattedDate).toBe(''); - }); }); diff --git a/packages/date/src/test/getTimeZoneString.js b/packages/date/src/test/getTimeZoneString.ts similarity index 93% rename from packages/date/src/test/getTimeZoneString.js rename to packages/date/src/test/getTimeZoneString.ts index 21565885f632..57a0b0a72ba1 100644 --- a/packages/date/src/test/getTimeZoneString.js +++ b/packages/date/src/test/getTimeZoneString.ts @@ -68,9 +68,4 @@ describe('date/getTimeZoneString', () => { updateSettings({ gmtOffset: -121.1 }); expect(getTimeZoneString()).toBe('-02:01'); }); - - it('returns default is offset if NaN', () => { - updateSettings({ gmtOffset: 'EST' }); - expect(getTimeZoneString()).toBe('+00'); - }); }); diff --git a/packages/date/src/test/is12Hour.js b/packages/date/src/test/is12Hour.ts similarity index 100% rename from packages/date/src/test/is12Hour.js rename to packages/date/src/test/is12Hour.ts diff --git a/packages/date/src/test/toUTCDate.js b/packages/date/src/test/toUTCDate.ts similarity index 100% rename from packages/date/src/test/toUTCDate.js rename to packages/date/src/test/toUTCDate.ts diff --git a/packages/design-system/src/components/dialog/index.js b/packages/design-system/src/components/dialog/index.js index 25eb14955752..270e778a44ed 100644 --- a/packages/design-system/src/components/dialog/index.js +++ b/packages/design-system/src/components/dialog/index.js @@ -62,11 +62,26 @@ const DialogActions = styled.div` } } `; + +/** + * @typedef {Object} DialogProps + * @property {import('react').ReactNode} children Children. + * @property {string} title Title. + * @property {import('react').ReactNode[]} actions Actions. + * @property {boolean} isOpen Whether the dialog is open. + * @property {Function} onClose Close callback. + * @property {string} contentLabel Content label. + */ + /** + * Dialog component. + * * Dialogs should be wrapped in a ThemeProvider * and given the inverted theme to the app. + * + * @param {DialogProps} Dialog props. + * @return {import('react').ReactElement} Dialog. */ - export function Dialog({ children, title, diff --git a/packages/design-system/src/components/keyboard/gridview/useGridViewKeys.js b/packages/design-system/src/components/keyboard/gridview/useGridViewKeys.js index c94ccac223c7..46ec25b5edad 100644 --- a/packages/design-system/src/components/keyboard/gridview/useGridViewKeys.js +++ b/packages/design-system/src/components/keyboard/gridview/useGridViewKeys.js @@ -45,9 +45,8 @@ import { /** * Allows keyboard arrow navigation through grids * - * @param {UseGridViewKeysProps} props + * @param {UseGridViewKeysProps} props Grid view keys props. */ - function useGridViewKeys(props) { const { currentItemId, diff --git a/packages/design-system/src/components/tooltip/index.js b/packages/design-system/src/components/tooltip/index.js index 30c0caa7f768..3c60b59caab5 100644 --- a/packages/design-system/src/components/tooltip/index.js +++ b/packages/design-system/src/components/tooltip/index.js @@ -102,7 +102,6 @@ let lastVisibleDelayedTooltip = null; * @param {number} props.popupZIndexOverride If present, passes an override for z-index to popup * @return {import('react').Component} BaseTooltip element */ - function BaseTooltip({ title, shortcut, diff --git a/packages/dom/src/test/escapeHTML.js b/packages/dom/src/test/escapeHTML.ts similarity index 100% rename from packages/dom/src/test/escapeHTML.js rename to packages/dom/src/test/escapeHTML.ts diff --git a/packages/elements/src/utils/test/getElementOrigin.js b/packages/elements/src/utils/test/getElementOrigin.ts similarity index 100% rename from packages/elements/src/utils/test/getElementOrigin.js rename to packages/elements/src/utils/test/getElementOrigin.ts diff --git a/packages/elements/tsconfig.json b/packages/elements/tsconfig.json index 0bc2aec0bb11..fdbdea8d727c 100644 --- a/packages/elements/tsconfig.json +++ b/packages/elements/tsconfig.json @@ -10,6 +10,5 @@ { "path": "../patterns" }, { "path": "../units" } ], - "include": ["src/**/*"], - "exclude": ["src/**/test/**/*"] + "include": ["src/**/*"] } diff --git a/packages/fonts/src/test/curatedFonts.js b/packages/fonts/src/test/curatedFonts.ts similarity index 93% rename from packages/fonts/src/test/curatedFonts.js rename to packages/fonts/src/test/curatedFonts.ts index 0a039d58989c..efecf20daa65 100644 --- a/packages/fonts/src/test/curatedFonts.js +++ b/packages/fonts/src/test/curatedFonts.ts @@ -24,14 +24,15 @@ import { resolve } from 'path'; * Internal dependencies */ import { CURATED_FONT_NAMES } from '../constants'; +import type { Font } from '../types'; describe('Curated fonts', () => { - const fonts = JSON.parse( + const fonts: Font[] = JSON.parse( readFileSync( resolve(process.cwd(), 'packages/fonts/src/fonts.json'), 'utf8' ) - ); + ) as Font[]; const fontNames = fonts.map(({ family }) => family); // @see https://github.com/googleforcreators/web-stories-wp/issues/3880 diff --git a/packages/i18n/src/test/transformNode.js b/packages/i18n/src/test/transformNode.tsx similarity index 92% rename from packages/i18n/src/test/transformNode.js rename to packages/i18n/src/test/transformNode.tsx index 46d9e55146a9..b09824edcca6 100644 --- a/packages/i18n/src/test/transformNode.js +++ b/packages/i18n/src/test/transformNode.tsx @@ -18,6 +18,7 @@ * External dependencies */ import { renderToStaticMarkup } from '@googleforcreators/react'; +import type { ReactNode } from 'react'; /** * Internal dependencies @@ -57,7 +58,7 @@ describe('transformNode', () => { node.setAttribute('class', 'bar'); node.textContent = 'Hello World'; - const AwesomeComponent = ({ children }) => { + const AwesomeComponent = ({ children }: { children?: ReactNode }) => { return (
{children} @@ -81,7 +82,11 @@ describe('transformNode', () => { p.appendChild(span); node.appendChild(p); - const AwesomeComponent = ({ children }) => { + const AwesomeComponent = ({ + children, + }: { + children?: ReactNode | undefined; + }) => { return ( {children} diff --git a/packages/i18n/src/test/translateToExclusiveList.js b/packages/i18n/src/test/translateToExclusiveList.ts similarity index 65% rename from packages/i18n/src/test/translateToExclusiveList.js rename to packages/i18n/src/test/translateToExclusiveList.ts index d298aa887eab..bf0ea0bfb5d6 100644 --- a/packages/i18n/src/test/translateToExclusiveList.js +++ b/packages/i18n/src/test/translateToExclusiveList.ts @@ -20,13 +20,15 @@ import translateToExclusiveList from '../translateToExclusiveList'; describe('translateToExclusiveList', () => { - it.each` - options | result - ${[]} | ${''} - ${['one']} | ${'one'} - ${['doctor', 'barnacle']} | ${'doctor or barnacle'} - ${['apple', 'banana', 'mango', 'dragonfruit']} | ${'apple, banana, mango, or dragonfruit'} - `('should translate as expected', ({ options, result }) => { + it.each([ + [[], ''], + [['one'], 'one'], + [['doctor', 'barnacle'], 'doctor or barnacle'], + [ + ['apple', 'banana', 'mango', 'dragonfruit'], + 'apple, banana, mango, or dragonfruit', + ], + ])('should translate as expected', (options, result) => { expect(translateToExclusiveList(options)).toBe(result); }); }); diff --git a/packages/i18n/src/test/translateToInclusiveList.js b/packages/i18n/src/test/translateToInclusiveList.ts similarity index 65% rename from packages/i18n/src/test/translateToInclusiveList.js rename to packages/i18n/src/test/translateToInclusiveList.ts index 8a1d164400f0..9588bce2d929 100644 --- a/packages/i18n/src/test/translateToInclusiveList.js +++ b/packages/i18n/src/test/translateToInclusiveList.ts @@ -13,19 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + /** * Internal dependencies */ import translateToInclusiveList from '../translateToInclusiveList'; describe('translateToInclusiveList', () => { - it.each` - options | result - ${[]} | ${''} - ${['one']} | ${'one'} - ${['doctor', 'barnacle']} | ${'doctor and barnacle'} - ${['apple', 'banana', 'mango', 'dragonfruit']} | ${'apple, banana, mango, and dragonfruit'} - `('should translate as expected', ({ options, result }) => { + it.each([ + [[], ''], + [['one'], 'one'], + [['doctor', 'barnacle'], 'doctor and barnacle'], + [ + ['apple', 'banana', 'mango', 'dragonfruit'], + 'apple, banana, mango, and dragonfruit', + ], + ])('should translate as expected', (options, result) => { expect(translateToInclusiveList(options)).toBe(result); }); }); diff --git a/packages/i18n/src/test/translateWithMarkup.js b/packages/i18n/src/test/translateWithMarkup.tsx similarity index 94% rename from packages/i18n/src/test/translateWithMarkup.js rename to packages/i18n/src/test/translateWithMarkup.tsx index 17bfb8e622d6..0cebfc383314 100644 --- a/packages/i18n/src/test/translateWithMarkup.js +++ b/packages/i18n/src/test/translateWithMarkup.tsx @@ -18,6 +18,7 @@ * External dependencies */ import { renderToStaticMarkup } from '@googleforcreators/react'; +import type { ReactNode } from 'react'; /** * Internal dependencies @@ -72,7 +73,10 @@ describe('TranslateWithMarkup component', () => { it('returns expected React element for custom component', () => { const string = 'This is a link!'; - const Link = (props) => { + const Link = (props: { + href: string; + children?: ReactNode | undefined; + }) => { return {props.children}; }; @@ -86,7 +90,12 @@ describe('TranslateWithMarkup component', () => { }); it('returns expected React element for multiple components', () => { - const Link = (props) => { + const Link = (props: { + href: string; + target: string; + rel: string; + children?: ReactNode | undefined; + }) => { return {props.children}; }; diff --git a/packages/i18n/src/translateWithMarkup.tsx b/packages/i18n/src/translateWithMarkup.tsx index d5cf3d18afd9..c71912fcc10f 100644 --- a/packages/i18n/src/translateWithMarkup.tsx +++ b/packages/i18n/src/translateWithMarkup.tsx @@ -51,8 +51,11 @@ const VOID_ELEMENTS = [ * @param mapping Map of tag names to React components. * @return Transformed node. */ -export function transformNode(node: Element, mapping: Mapping = {}) { - const { childNodes, localName, nodeType, textContent } = node; +export function transformNode( + node: Element | Text, + mapping: Mapping = {} +): ReactElement | string | null { + const { childNodes, nodeType, textContent } = node; if (Node.TEXT_NODE === nodeType) { return textContent; } @@ -63,6 +66,8 @@ export function transformNode(node: Element, mapping: Mapping = {}) { ) : null; + const { localName } = node as Element; + if (localName in mapping) { return cloneElement(mapping[localName], {}, children); } @@ -90,7 +95,7 @@ function transform(node: Element, mapping: Mapping = {}): ReactNode[] { } interface TranslateWithMarkupProps { - mapping: Mapping; + mapping?: Mapping; children: string; } @@ -111,7 +116,7 @@ interface TranslateWithMarkupProps { function TranslateWithMarkup({ mapping = {}, children, -}: TranslateWithMarkupProps) { +}: TranslateWithMarkupProps): ReactElement | null { //Ensure all Object keys are lowercase as the DOMParser converts tag names to lowercase. mapping = Object.fromEntries( Object.entries(mapping).map(([k, v]) => [k.toLowerCase(), v]) @@ -131,13 +136,23 @@ function TranslateWithMarkup({ const node = new DOMParser().parseFromString(children, 'text/html').body .firstChild as Element; - return node - ? transform( - node, - mapping - //eslint-disable-next-line react/no-array-index-key -- Order should never change. - ).map((element, index) => {element}) - : []; + + if (!node) { + return null; + } + + return ( + + {transform(node, mapping).map((element, index) => ( + + {element} + + ))} + + ); } export default TranslateWithMarkup; diff --git a/packages/media/src/calculateSrcSet.ts b/packages/media/src/calculateSrcSet.ts index b1d5cdae6893..25d5490b003e 100644 --- a/packages/media/src/calculateSrcSet.ts +++ b/packages/media/src/calculateSrcSet.ts @@ -55,14 +55,13 @@ function calculateSrcSet(resource: Resource): string | null { return ( Object.values(resource.sizes) - .sort((s1, s2) => Number(s2.width) - Number(s1.width)) + .sort((s1, s2) => s2.width - s1.width) .filter((s) => aspectRatiosApproximatelyMatch(s, resource)) // Remove duplicates. Given it's already ordered in descending width order, we can be // more efficient and just check the last item in each reduction. .reduce( (unique: Array, s) => - unique.length && - Number(unique[unique.length - 1].width) === Number(s.width) + unique.length && unique[unique.length - 1].width === s.width ? unique : [...unique, s], [] diff --git a/packages/media/src/createResource.ts b/packages/media/src/createResource.ts index 0f81138a47fd..4a565f4221ba 100644 --- a/packages/media/src/createResource.ts +++ b/packages/media/src/createResource.ts @@ -29,7 +29,6 @@ import { * Internal dependencies */ import getTypeFromMime from './getTypeFromMime'; -import normalizeResourceSizes from './normalizeResourceSizes'; import type { ResourceInput } from './types'; /** @@ -63,7 +62,7 @@ function createResource({ mimeType, width, height, - sizes: normalizeResourceSizes(sizes), + sizes, isPlaceholder, isExternal, needsProxy, diff --git a/packages/media/src/getMsFromHMS.ts b/packages/media/src/getMsFromHMS.ts index c60dbb083b7f..462be86b9b88 100644 --- a/packages/media/src/getMsFromHMS.ts +++ b/packages/media/src/getMsFromHMS.ts @@ -20,7 +20,7 @@ * @param time Time in HH:MM:SS or H:M:S format. * @return Milliseconds. */ -function getMsFromHMS(time: string): number { +function getMsFromHMS(time: string | null): number { if (!time) { return 0; } diff --git a/packages/media/src/getResourceSize.ts b/packages/media/src/getResourceSize.ts index 5cb202ce1d49..3bfd55d38340 100644 --- a/packages/media/src/getResourceSize.ts +++ b/packages/media/src/getResourceSize.ts @@ -20,11 +20,11 @@ import { FULLBLEED_HEIGHT, PAGE_WIDTH } from '@googleforcreators/units'; interface ResourceSizeParams { - width: number; - height: number; - posterGenerated: boolean; - posterWidth: number; - posterHeight: number; + width?: number; + height?: number; + posterGenerated?: boolean; + posterWidth?: number; + posterHeight?: number; } /** diff --git a/packages/media/src/mimeTypes.ts b/packages/media/src/mimeTypes.ts index b884a9d26442..c6054193c655 100644 --- a/packages/media/src/mimeTypes.ts +++ b/packages/media/src/mimeTypes.ts @@ -17,7 +17,7 @@ /** * External dependencies */ -import mime from 'mime/lite'; +import * as mime from 'mime/lite'; /** * Get the file extension for a given mime type. diff --git a/packages/media/src/resourceList.ts b/packages/media/src/resourceList.ts index 08bbc9648c37..0d14fa7f7d33 100644 --- a/packages/media/src/resourceList.ts +++ b/packages/media/src/resourceList.ts @@ -19,9 +19,14 @@ */ import type { ResourceId } from '@googleforcreators/types'; -interface ResourceCacheEntry { +export enum ResourceCacheEntryType { + Cached = 'cached', + Fullsize = 'fullsize', +} + +export interface ResourceCacheEntry { url: string; - type: 'cached' | 'fullsize'; + type: ResourceCacheEntryType; } interface ResourceCache { @@ -45,7 +50,7 @@ const resourceList: ResourceCache = { return this.list[id]; }, set: function (id: ResourceId, value: ResourceCacheEntry): void { - if (value?.type === 'cached' && this.list[id]) { + if (value?.type === ResourceCacheEntryType.Cached && this.list[id]) { // We already have better (or equal) resource than cached, prevent flickering return; } diff --git a/packages/media/src/test/calculateSrcSet.js b/packages/media/src/test/calculateSrcSet.ts similarity index 54% rename from packages/media/src/test/calculateSrcSet.js rename to packages/media/src/test/calculateSrcSet.ts index aec78eed863b..68ef08b17f42 100644 --- a/packages/media/src/test/calculateSrcSet.js +++ b/packages/media/src/test/calculateSrcSet.ts @@ -14,141 +14,189 @@ * limitations under the License. */ +/** + * External dependencies + */ +import { ResourceType } from '@googleforcreators/types'; + /** * Internal dependencies */ import calculateSrcSet from '../calculateSrcSet'; +import createResource from '../createResource'; describe('calculateSrcSet', () => { it('should generate srcset properly', () => { - const resource = { + const resource = createResource({ + id: 123, width: 400, height: 800, + type: ResourceType.Image, + mimeType: 'image/jpeg', + src: 'URL', + alt: '', sizes: { size1: { + mimeType: 'image/jpeg', sourceUrl: 'URL1', width: 200, height: 400, }, size2: { + mimeType: 'image/jpeg', sourceUrl: 'URL2', width: 400, height: 800, }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe('URL2 400w,URL1 200w'); }); it("should skip images that don't match the largest image's orientation", () => { - const resource = { + const resource = createResource({ + id: 123, width: 400, height: 800, + type: ResourceType.Image, + mimeType: 'image/jpeg', + src: 'URL', + alt: '', sizes: { size1: { + mimeType: 'image/jpeg', sourceUrl: 'URL1', width: 200, height: 400, }, size2: { + mimeType: 'image/jpeg', sourceUrl: 'URL2', width: 400, height: 800, }, size3: { + mimeType: 'image/jpeg', sourceUrl: 'URL3', width: 400, height: 410, }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe('URL2 400w,URL1 200w'); }); it('should remove duplicate width images', () => { - const resource = { + const resource = createResource({ + id: 123, width: 800, height: 1600, + type: ResourceType.Image, + mimeType: 'image/jpeg', + src: 'URL', + alt: '', sizes: { size1: { + mimeType: 'image/jpeg', sourceUrl: 'URL1', width: 200, height: 400, }, size2: { + mimeType: 'image/jpeg', sourceUrl: 'URL2', width: 400, height: 800, }, size3: { + mimeType: 'image/jpeg', sourceUrl: 'URL3', width: 200, height: 400, }, size4: { + mimeType: 'image/jpeg', sourceUrl: 'URL3', width: 800, height: 1600, }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe('URL3 800w,URL2 400w,URL1 200w'); }); - it('should skip sizes that are invalid', () => { - const resource = { - src: 'default-url', - width: 400, - height: 200, - sizes: { - img1: { height: 100, sourceUrl: 'small-url' }, - img2: { width: 300, height: 150 }, - img3: { width: 400, height: 200, sourceUrl: 'large-url' }, - }, - }; - - const srcSet = calculateSrcSet(resource); - expect(srcSet).toBe('large-url 400w'); - }); - it('should encode URLs with spaces', () => { - const resource = { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', src: 'default-url', width: 500, height: 500, sizes: { - img1: { width: 100, height: 100, sourceUrl: 'small url' }, - img2: { width: 200, height: 200, sourceUrl: 'medium url' }, - img3: { width: 300, height: 300, sourceUrl: 'large url' }, + img1: { + mimeType: 'image/jpeg', + width: 100, + height: 100, + sourceUrl: 'small url', + }, + img2: { + mimeType: 'image/jpeg', + width: 200, + height: 200, + sourceUrl: 'medium url', + }, + img3: { + mimeType: 'image/jpeg', + width: 300, + height: 300, + sourceUrl: 'large url', + }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe('large%20url 300w,medium%20url 200w,small%20url 100w'); }); it('should not encode already encoded URLs', () => { - const resource = { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', src: 'default-url', width: 500, height: 500, sizes: { img1: { + mimeType: 'image/jpeg', width: 100, height: 100, sourceUrl: 'https://firebasestorage.googleapis.com/v0/b/c-dashboard-d4a82.appspot.com/o/media%2FNurUn5ekSeOkSCfk1yPIkg17buI3%2Fimages%2F1650068451121-omid-armin-nACf6L_pXq8-unsplash.jpeg?alt=media&token=edc4dfd7-6ac1-44a0-83b7-1aa99a3adad3', }, - img2: { width: 200, height: 200, sourceUrl: 'medium%2Furl' }, - img3: { width: 300, height: 300, sourceUrl: 'large%2Furl' }, + img2: { + mimeType: 'image/jpeg', + width: 200, + height: 200, + sourceUrl: 'medium%2Furl', + }, + img3: { + mimeType: 'image/jpeg', + width: 300, + height: 300, + sourceUrl: 'large%2Furl', + }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe( @@ -157,16 +205,35 @@ describe('calculateSrcSet', () => { }); it('should encode URLs with multiple spaces', () => { - const resource = { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', src: 'default-url', width: 500, height: 500, sizes: { - img1: { width: 100, height: 100, sourceUrl: 'small url' }, - img2: { width: 200, height: 200, sourceUrl: 'medium url' }, - img3: { width: 300, height: 300, sourceUrl: 'large url' }, + img1: { + mimeType: 'image/jpeg', + width: 100, + height: 100, + sourceUrl: 'small url', + }, + img2: { + mimeType: 'image/jpeg', + width: 200, + height: 200, + sourceUrl: 'medium url', + }, + img3: { + mimeType: 'image/jpeg', + width: 300, + height: 300, + sourceUrl: 'large url', + }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe( @@ -175,167 +242,73 @@ describe('calculateSrcSet', () => { }); it('should ignore sizes with empty URLs', () => { - const resource = { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', src: 'default-url', width: 500, height: 500, sizes: { - img1: { width: 100, height: 100, sourceUrl: '' }, - img2: { width: 200, height: 200, sourceUrl: '' }, - img3: { width: 300, height: 300, sourceUrl: '' }, - }, - }; - - const srcSet = calculateSrcSet(resource); - expect(srcSet).toBe(''); - }); - - it('should convert strings when checking for duplicates', () => { - const resource = { - src: 'image.jpg', - width: 1000, - height: 1333, - sizes: { - thumbnail: { - width: 300, - height: 300, - sourceUrl: 'image-300x300.jpg', - }, - medium: { - width: 225, - height: 300, - sourceUrl: 'image-225x300.jpg', - }, - medium_large: { - width: 768, - height: 1024, - sourceUrl: 'image-768x1024.jpg', + img1: { + mimeType: 'image/jpeg', + width: 100, + height: 100, + sourceUrl: '', }, - large: { - width: 768, - height: 1024, - sourceUrl: 'image-768x1024.jpg', + img2: { + mimeType: 'image/jpeg', + width: 200, + height: 200, + sourceUrl: '', }, - 'rss-image': { - width: 225, + img3: { + mimeType: 'image/jpeg', + width: 300, height: 300, - sourceUrl: 'image-225x300.jpg', - }, - 'featured-long': { - width: 600, - height: 850, - sourceUrl: 'image-600x850.jpg', - }, - 'featured-wide': { - width: 800, - height: 560, - sourceUrl: 'image-800x560.jpg', - }, - 'featured-square': { - width: 600, - height: 600, - sourceUrl: 'image-600x600.jpg', - }, - 'single-post-featured': { - width: 1000, - height: 500, - sourceUrl: 'image-1000x500.jpg', - }, - wp_rp_thumbnail: { - width: 400, - height: 400, - sourceUrl: 'image-400x400.jpg', - }, - thumbnail_old_300x300: { - width: '300', - height: '300', - sourceUrl: 'image-300x300.jpg', - }, - medium_old_225x300: { - width: '225', - height: '300', - sourceUrl: 'image-225x300.jpg', - }, - medium_large_old_768x1024: { - width: '768', - height: '1024', - sourceUrl: 'image-768x1024.jpg', - }, - large_old_768x1024: { - width: '768', - height: '1024', - sourceUrl: 'image-768x1024.jpg', - }, - 'rss-image_old_225x300': { - width: '225', - height: '300', - sourceUrl: 'image-225x300.jpg', - }, - 'square-entry-image': { - width: '400', - height: '400', - sourceUrl: 'image-400x400.jpg', - }, - 'vertical-entry-image': { - width: '600', - height: '850', - sourceUrl: 'image-600x850.jpg', - }, - 'small-vertical-entry-image': { - width: '150', - height: '200', - sourceUrl: 'image-150x200.jpg', - }, - 'horizontal-entry-image': { - width: '775', - height: '500', - sourceUrl: 'image-775x500.jpg', - }, - wp_rp_thumbnail_old_400x400: { - width: '400', - height: '400', - sourceUrl: 'image-400x400.jpg', - }, - full: { - width: 1000, - height: 1333, - sourceUrl: 'image.jpg', + sourceUrl: '', }, }, - }; + }); const srcSet = calculateSrcSet(resource); - expect(srcSet).toBe( - 'image.jpg 1000w,image-768x1024.jpg 768w,image-225x300.jpg 225w,image-150x200.jpg 150w' - ); + expect(srcSet).toBe(''); }); it('should not break image URLs with commas in them', () => { - const resource = { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', src: 'image.jpg', width: 640, height: 853, sizes: { thumbnail: { + mimeType: 'image/jpeg', width: 150, height: 200, sourceUrl: 'https://example.com/images/w_150,h_200,c_scale/image.jpg?_i=AA', }, medium: { + mimeType: 'image/jpeg', width: 225, height: 300, sourceUrl: 'https://example.com/images/w_225,h_300,c_scale/image.jpg?_i=AA', }, full: { + mimeType: 'image/jpeg', width: 640, height: 853, sourceUrl: 'https://example.com/images/w_640,h_853,c_scale/image.jpg?_i=AA', }, }, - }; + }); const srcSet = calculateSrcSet(resource); expect(srcSet).toBe( diff --git a/packages/media/src/test/formatMsToHMS.js b/packages/media/src/test/formatMsToHMS.ts similarity index 100% rename from packages/media/src/test/formatMsToHMS.js rename to packages/media/src/test/formatMsToHMS.ts diff --git a/packages/media/src/test/getFileBasename.js b/packages/media/src/test/getFileBasename.ts similarity index 100% rename from packages/media/src/test/getFileBasename.js rename to packages/media/src/test/getFileBasename.ts diff --git a/packages/media/src/test/getMsFromHMS.js b/packages/media/src/test/getMsFromHMS.ts similarity index 100% rename from packages/media/src/test/getMsFromHMS.js rename to packages/media/src/test/getMsFromHMS.ts diff --git a/packages/media/src/test/getResourceSize.js b/packages/media/src/test/getResourceSize.ts similarity index 100% rename from packages/media/src/test/getResourceSize.js rename to packages/media/src/test/getResourceSize.ts diff --git a/packages/media/src/test/getSmallestUrlForWidth.js b/packages/media/src/test/getSmallestUrlForWidth.js deleted file mode 100644 index 755fe15557dc..000000000000 --- a/packages/media/src/test/getSmallestUrlForWidth.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Internal dependencies - */ -import getSmallestUrlForWidth from '../getSmallestUrlForWidth'; - -describe('getSmallestUrlForWidth', () => { - beforeEach(() => { - window.devicePixelRatio = 1; - }); - - it('should return the smallest available image URL greater than minWidth', () => { - const resource = { - src: 'default-url', - width: 400, - height: 200, - sizes: { - img1: { width: 200, height: 100, sourceUrl: 'full-url' }, - img2: { width: 300, height: 150, sourceUrl: 'med-url' }, - img3: { width: 400, height: 200, sourceUrl: 'large-url' }, - }, - }; - expect(getSmallestUrlForWidth(210, resource)).toBe('med-url'); - }); - - it('should return an image according to the device pixel ratio', () => { - window.devicePixelRatio = 2; - const resource = { - src: 'default-url', - width: 400, - height: 200, - sizes: { - img1: { width: 200, height: 100, sourceUrl: 'full-url' }, - img2: { width: 300, height: 150, sourceUrl: 'med-url' }, - img3: { width: 400, height: 200, sourceUrl: 'large-url' }, - }, - }; - expect(getSmallestUrlForWidth(160, resource)).toBe('large-url'); - }); - - it('should return an image with the same aspect ratio', () => { - const resource = { - src: 'default-url', - width: 400, - height: 200, - sizes: { - img1: { width: 200, height: 500, sourceUrl: 'portrait-url' }, - img2: { width: 250, height: 250, sourceUrl: 'square-url' }, - img3: { width: 300, height: 150, sourceUrl: 'med-url' }, - img4: { width: 400, height: 200, sourceUrl: 'large-url' }, - }, - }; - expect(getSmallestUrlForWidth(150, resource)).toBe('med-url'); - }); - - it('should return the resource.src if there is no valid thumb', () => { - const resource = { - src: 'default-url', - width: 400, - height: 200, - sizes: { - img1: { width: 200, height: 1, sourceUrl: 'small-url' }, - img2: { width: 300, height: 1, sourceUrl: 'med-url' }, - img3: { width: 400, height: 1, sourceUrl: 'large-url' }, - }, - }; - expect(getSmallestUrlForWidth(440, resource)).toBe('default-url'); - }); - - it('should return the default src URL if no alternatives', () => { - const resource = { - src: 'default-url', - width: 400, - height: 200, - }; - expect(getSmallestUrlForWidth(200, resource)).toBe('default-url'); - }); -}); diff --git a/packages/media/src/test/getSmallestUrlForWidth.ts b/packages/media/src/test/getSmallestUrlForWidth.ts new file mode 100644 index 000000000000..ff2535e38f52 --- /dev/null +++ b/packages/media/src/test/getSmallestUrlForWidth.ts @@ -0,0 +1,189 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * External dependencies + */ +import { ResourceType } from '@googleforcreators/types'; + +/** + * Internal dependencies + */ +import getSmallestUrlForWidth from '../getSmallestUrlForWidth'; +import createResource from '../createResource'; + +describe('getSmallestUrlForWidth', () => { + beforeEach(() => { + window.devicePixelRatio = 1; + }); + + afterEach(() => { + window.devicePixelRatio = 1; + }); + + it('should return the smallest available image URL greater than minWidth', () => { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', + src: 'default-url', + width: 400, + height: 200, + sizes: { + img1: { + mimeType: 'image/jpeg', + width: 200, + height: 100, + sourceUrl: 'full-url', + }, + img2: { + mimeType: 'image/jpeg', + width: 300, + height: 150, + sourceUrl: 'med-url', + }, + img3: { + mimeType: 'image/jpeg', + width: 400, + height: 200, + sourceUrl: 'large-url', + }, + }, + }); + expect(getSmallestUrlForWidth(210, resource)).toBe('med-url'); + }); + + it('should return an image according to the device pixel ratio', () => { + window.devicePixelRatio = 2; + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', + src: 'default-url', + width: 400, + height: 200, + sizes: { + img1: { + mimeType: 'image/jpeg', + width: 200, + height: 100, + sourceUrl: 'full-url', + }, + img2: { + mimeType: 'image/jpeg', + width: 300, + height: 150, + sourceUrl: 'med-url', + }, + img3: { + mimeType: 'image/jpeg', + width: 400, + height: 200, + sourceUrl: 'large-url', + }, + }, + }); + expect(getSmallestUrlForWidth(160, resource)).toBe('large-url'); + }); + + it('should return an image with the same aspect ratio', () => { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', + src: 'default-url', + width: 400, + height: 200, + sizes: { + img1: { + mimeType: 'image/jpeg', + width: 200, + height: 500, + sourceUrl: 'portrait-url', + }, + img2: { + mimeType: 'image/jpeg', + width: 250, + height: 250, + sourceUrl: 'square-url', + }, + img3: { + mimeType: 'image/jpeg', + width: 300, + height: 150, + sourceUrl: 'med-url', + }, + img4: { + mimeType: 'image/jpeg', + width: 400, + height: 200, + sourceUrl: 'large-url', + }, + }, + }); + expect(getSmallestUrlForWidth(150, resource)).toBe('med-url'); + }); + + it('should return the resource.src if there is no valid thumb', () => { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', + src: 'default-url', + width: 400, + height: 200, + sizes: { + img1: { + mimeType: 'image/jpeg', + width: 200, + height: 1, + sourceUrl: 'small-url', + }, + img2: { + mimeType: 'image/jpeg', + width: 300, + height: 1, + sourceUrl: 'med-url', + }, + img3: { + mimeType: 'image/jpeg', + width: 400, + height: 1, + sourceUrl: 'large-url', + }, + }, + }); + expect(getSmallestUrlForWidth(440, resource)).toBe('default-url'); + }); + + it('should return the default src URL if no alternatives', () => { + const resource = createResource({ + id: 123, + type: ResourceType.Image, + mimeType: 'image/jpeg', + alt: '', + src: 'default-url', + width: 400, + height: 200, + sizes: {}, + }); + expect(getSmallestUrlForWidth(200, resource)).toBe('default-url'); + }); +}); diff --git a/packages/media/src/test/getVideoLengthDisplay.js b/packages/media/src/test/getVideoLengthDisplay.ts similarity index 67% rename from packages/media/src/test/getVideoLengthDisplay.js rename to packages/media/src/test/getVideoLengthDisplay.ts index 29886c434257..aa6529c8b2b8 100644 --- a/packages/media/src/test/getVideoLengthDisplay.js +++ b/packages/media/src/test/getVideoLengthDisplay.ts @@ -20,14 +20,12 @@ import getVideoLengthDisplay from '../getVideoLengthDisplay'; describe('getVideoLengthDisplay', () => { - it('should correctly format 0', () => { - expect(getVideoLengthDisplay(0, true)).toBe('0:00'); - }); - - it('should return correct results', () => { - expect(getVideoLengthDisplay(1)).toBe('0:01'); - expect(getVideoLengthDisplay(60)).toBe('1:00'); - expect(getVideoLengthDisplay(610)).toBe('10:10'); - expect(getVideoLengthDisplay(6000)).toBe('1:40:00'); + it.each([ + [0, '0:00'], + [60, '1:00'], + [610, '10:10'], + [6000, '1:40:00'], + ])('getVideoLengthDisplay(%d) should return %s', (length, expected) => { + expect(getVideoLengthDisplay(length)).toBe(expected); }); }); diff --git a/packages/media/src/test/isAnimatedGif.js b/packages/media/src/test/isAnimatedGif.ts similarity index 100% rename from packages/media/src/test/isAnimatedGif.js rename to packages/media/src/test/isAnimatedGif.ts diff --git a/packages/media/src/test/mimeTypes.js b/packages/media/src/test/mimeTypes.ts similarity index 100% rename from packages/media/src/test/mimeTypes.js rename to packages/media/src/test/mimeTypes.ts diff --git a/packages/media/src/test/resourceList.js b/packages/media/src/test/resourceList.ts similarity index 89% rename from packages/media/src/test/resourceList.js rename to packages/media/src/test/resourceList.ts index e009d1a468cd..edf76455b325 100644 --- a/packages/media/src/test/resourceList.js +++ b/packages/media/src/test/resourceList.ts @@ -17,7 +17,7 @@ /** * Internal dependencies */ -import resourceList from '../resourceList'; +import resourceList, { ResourceCacheEntryType } from '../resourceList'; describe('resourceList', () => { beforeEach(() => { @@ -27,7 +27,7 @@ describe('resourceList', () => { it('should set and get cached resource by id', () => { const id = 461; const resourceState = { - type: 'cached', + type: ResourceCacheEntryType.Cached, url: 'http://localhost/thumb.jpg', }; @@ -44,11 +44,11 @@ describe('resourceList', () => { it('should not update the resource to lower(cached) quality', () => { const id = 461; const resourceStateCached = { - type: 'cached', + type: ResourceCacheEntryType.Cached, url: 'http://localhost/thumb.jpg', }; const resourceStateFullsize = { - type: 'fullsize', + type: ResourceCacheEntryType.Fullsize, url: 'http://localhost/full.jpg', }; diff --git a/packages/media/src/types.ts b/packages/media/src/types.ts index 664dce3b4a38..ed0209393010 100644 --- a/packages/media/src/types.ts +++ b/packages/media/src/types.ts @@ -26,6 +26,7 @@ import type { Output, ResourceSize, ResourceType, + ResourceId, TrimData, } from '@googleforcreators/types'; @@ -215,7 +216,7 @@ export interface ResourceInput { * The resource ID. * TODO: currently this value is local to the editor's media system. */ - id: string; + id: ResourceId; /** The type of the resource. */ type: ResourceType; /** The MIME type of the resource. E.g. "image/png". */ @@ -237,12 +238,12 @@ export interface ResourceInput { /** Whether the resource is a placeholder. */ isPlaceholder?: boolean; /** Whether the resource needs a CORS proxy. */ - needsProxy: boolean; + needsProxy?: boolean; /** Resource creation date. */ creationDate?: string; /** Resource sizes */ sizes: { [key: string]: ResourceSize }; - /** Resource author a ttribution */ + /** Resource author attribution */ attribution?: Attribution; /** The resource's poster. */ poster?: string; diff --git a/packages/moveable/src/test/areEventsDragging.js b/packages/moveable/src/test/areEventsDragging.ts similarity index 84% rename from packages/moveable/src/test/areEventsDragging.js rename to packages/moveable/src/test/areEventsDragging.ts index a7ee919bb635..77359c8c9ee2 100644 --- a/packages/moveable/src/test/areEventsDragging.js +++ b/packages/moveable/src/test/areEventsDragging.ts @@ -31,7 +31,9 @@ describe('areEventsDragging', () => { clientY: 1, timeStamp: window.performance.now() + 10, }; - expect(areEventsDragging(firstEvent, secondEvent)).toBeFalse(); + expect( + areEventsDragging(firstEvent as MouseEvent, secondEvent as MouseEvent) + ).toBeFalse(); }); it('should consider a long delay between events dragging even if only moving a small distance', () => { @@ -45,7 +47,9 @@ describe('areEventsDragging', () => { clientY: 1, timeStamp: window.performance.now() + 1000, }; - expect(areEventsDragging(firstEvent, secondEvent)).toBeTrue(); + expect( + areEventsDragging(firstEvent as MouseEvent, secondEvent as MouseEvent) + ).toBeTrue(); }); it('should consider a long distance between events dragging even if fired in quick succession', () => { @@ -59,6 +63,8 @@ describe('areEventsDragging', () => { clientY: 10, timeStamp: window.performance.now() + 10, }; - expect(areEventsDragging(firstEvent, secondEvent)).toBeTrue(); + expect( + areEventsDragging(firstEvent as MouseEvent, secondEvent as MouseEvent) + ).toBeTrue(); }); }); diff --git a/packages/patterns/src/test/convertToCSS.js b/packages/patterns/src/test/convertToCSS.ts similarity index 70% rename from packages/patterns/src/test/convertToCSS.js rename to packages/patterns/src/test/convertToCSS.ts index bd53455c9892..1504b810a802 100644 --- a/packages/patterns/src/test/convertToCSS.js +++ b/packages/patterns/src/test/convertToCSS.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import type { CSSProperties } from 'react'; + /** * Internal dependencies */ @@ -21,17 +26,13 @@ import convertToCSS from '../convertToCSS'; describe('convertToCSS', () => { it('should convert object correctly', () => { - const input = { - fill: 0, + const input: CSSProperties = { + fill: 'none', backgroundColor: 'red', - borderLeftImage: 'radial-gradient(red, blue)', + borderImage: 'radial-gradient(red, blue)', }; - const output = [ - 'fill:0', - 'background-color:red', - 'border-left-image:radial-gradient(red, blue)', - ]; - const expected = output.map((v) => `${v};`).join(''); - expect(convertToCSS(input)).toStrictEqual(expected); + expect(convertToCSS(input)).toMatchInlineSnapshot( + `"fill:none;background-color:red;border-image:radial-gradient(red, blue);"` + ); }); }); diff --git a/packages/patterns/src/test/createSolid.js b/packages/patterns/src/test/createSolid.ts similarity index 100% rename from packages/patterns/src/test/createSolid.js rename to packages/patterns/src/test/createSolid.ts diff --git a/packages/patterns/src/test/createSolidFromString.js b/packages/patterns/src/test/createSolidFromString.ts similarity index 100% rename from packages/patterns/src/test/createSolidFromString.js rename to packages/patterns/src/test/createSolidFromString.ts diff --git a/packages/patterns/src/test/generatePatternStyles.js b/packages/patterns/src/test/generatePatternStyles.ts similarity index 94% rename from packages/patterns/src/test/generatePatternStyles.js rename to packages/patterns/src/test/generatePatternStyles.ts index d0b227e79dc6..f74b1b447e1e 100644 --- a/packages/patterns/src/test/generatePatternStyles.js +++ b/packages/patterns/src/test/generatePatternStyles.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import type { Linear, Radial } from '@googleforcreators/types'; + /** * Internal dependencies */ @@ -30,6 +35,8 @@ describe('generatePatternStyles', () => { describe('given an unknown type', () => { it('should throw error', () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- Testing the pattern type runtime check. + // @ts-ignore expect(() => generatePatternStyles({ type: 'comic' })).toThrow( /unknown pattern type/i ); @@ -72,7 +79,7 @@ describe('generatePatternStyles', () => { { color: { r: 255, g: 0, b: 0 }, position: 0 }, { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], - }, + } as Linear, 'fill' ) ).toThrow(/only generate solid/i); @@ -88,7 +95,7 @@ describe('generatePatternStyles', () => { { color: { r: 255, g: 0, b: 0 }, position: 0 }, { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], - }) + } as Linear) ).toStrictEqual({ backgroundImage: 'linear-gradient(0.5turn, #f00 0%, #00f 100%)', }); @@ -104,7 +111,7 @@ describe('generatePatternStyles', () => { { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], rotation: 0.25, - }) + } as Linear) ).toStrictEqual({ backgroundImage: 'linear-gradient(0.75turn, rgba(255,0,0,0) 0%, #f00 60%, #00f 100%)', @@ -121,7 +128,7 @@ describe('generatePatternStyles', () => { { color: { r: 0, g: 0, b: 255, a: 0 }, position: 1 }, ], alpha: 0.7, - }) + } as Linear) ).toStrictEqual({ backgroundImage: 'linear-gradient(0.5turn, rgba(255,0,0,0.35) 0%, rgba(255,0,0,0.7) 60%, rgba(0,0,255,0) 100%)', @@ -138,7 +145,7 @@ describe('generatePatternStyles', () => { { color: { r: 255, g: 0, b: 0 }, position: 0 }, { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(#f00 0%, #00f 100%)', }); @@ -153,7 +160,7 @@ describe('generatePatternStyles', () => { { color: { r: 255, g: 0, b: 0 }, position: 0.6 }, { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(rgba(255,0,0,0) 0%, #f00 60%, #00f 100%)', @@ -169,7 +176,7 @@ describe('generatePatternStyles', () => { { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], size: { w: 0.2, h: 0.45678 }, - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(ellipse 20% 45.68%, #f00 0%, #00f 100%)', @@ -185,7 +192,7 @@ describe('generatePatternStyles', () => { { color: { r: 0, g: 0, b: 255 }, position: 1 }, ], center: { x: 0.4, y: 0.6 }, - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(at 40% 60%, #f00 0%, #00f 100%)', }); @@ -201,7 +208,7 @@ describe('generatePatternStyles', () => { ], size: { w: 0.2, h: 0.45678 }, center: { x: 0.4, y: 0.6 }, - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(ellipse 20% 45.68% at 40% 60%, #f00 0%, #00f 100%)', @@ -218,7 +225,7 @@ describe('generatePatternStyles', () => { { color: { r: 0, g: 0, b: 255, a: 0 }, position: 1 }, ], alpha: 0.7, - }) + } as Radial) ).toStrictEqual({ backgroundImage: 'radial-gradient(rgba(255,0,0,0.35) 0%, rgba(255,0,0,0.7) 60%, rgba(0,0,255,0) 100%)', diff --git a/packages/patterns/src/test/getHexFromValue.js b/packages/patterns/src/test/getHexFromValue.ts similarity index 95% rename from packages/patterns/src/test/getHexFromValue.js rename to packages/patterns/src/test/getHexFromValue.ts index 72399b559039..18deb9e5647f 100644 --- a/packages/patterns/src/test/getHexFromValue.js +++ b/packages/patterns/src/test/getHexFromValue.ts @@ -104,10 +104,5 @@ describe('getHexFromValue', () => { expect(getHexFromValue('jsdhf78384')).toBeNull(); expect(getHexFromValue('')).toBeNull(); }); - - it('should return null if null or undefined passed in', () => { - expect(getHexFromValue(undefined)).toBeNull(); - expect(getHexFromValue(null)).toBeNull(); - }); }); }); diff --git a/packages/patterns/src/test/getOpaquePattern.js b/packages/patterns/src/test/getOpaquePattern.ts similarity index 72% rename from packages/patterns/src/test/getOpaquePattern.js rename to packages/patterns/src/test/getOpaquePattern.ts index c8976789eb2f..d2a4d8be6482 100644 --- a/packages/patterns/src/test/getOpaquePattern.js +++ b/packages/patterns/src/test/getOpaquePattern.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import { PatternType, Linear } from '@googleforcreators/types'; + /** * Internal dependencies */ @@ -30,26 +35,26 @@ describe('getOpaquePattern', () => { color: { r: 1, g: 1, b: 1, a: 1 }, }); expect( - getOpaquePattern({ color: { r: 1, g: 1, b: 1, a: null } }) + getOpaquePattern({ color: { r: 1, g: 1, b: 1, a: 0 } }) ).toMatchObject({ color: { r: 1, g: 1, b: 1, a: 1 }, }); }); it('should get the opaque color correctly from a gradient', () => { - const input = { - type: 'linear', + const input: Linear = { + type: PatternType.Linear, stops: [ - { color: { r: 1, g: 1, b: 1 } }, - { color: { r: 1, g: 1, b: 1, a: 0.5 } }, + { color: { r: 1, g: 1, b: 1 }, position: 0 }, + { color: { r: 1, g: 1, b: 1, a: 0.5 }, position: 1 }, ], alpha: 0.5, }; - const expected = { - type: 'linear', + const expected: Linear = { + type: PatternType.Linear, stops: [ - { color: { r: 1, g: 1, b: 1 } }, - { color: { r: 1, g: 1, b: 1, a: 0.5 } }, + { color: { r: 1, g: 1, b: 1 }, position: 0 }, + { color: { r: 1, g: 1, b: 1, a: 0.5 }, position: 1 }, ], }; expect(getOpaquePattern(input)).toMatchObject(expected); diff --git a/packages/patterns/src/test/getPreviewText.js b/packages/patterns/src/test/getPreviewText.ts similarity index 80% rename from packages/patterns/src/test/getPreviewText.js rename to packages/patterns/src/test/getPreviewText.ts index f026b2d074a6..f268fe57fc6e 100644 --- a/packages/patterns/src/test/getPreviewText.js +++ b/packages/patterns/src/test/getPreviewText.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import { PatternType, Linear, Radial, Solid } from '@googleforcreators/types'; + /** * Internal dependencies */ @@ -36,17 +41,20 @@ describe('getPreviewText', () => { }); it('should return hex ignoring alpha for explicit non-transparent solid', () => { - const input = { ...createSolid(255, 0, 255, 0.3), type: 'solid' }; + const input: Solid = { + ...createSolid(255, 0, 255, 0.3), + type: PatternType.Solid, + }; const result = getPreviewText(input); const expected = 'FF00FF'; expect(result).toBe(expected); }); it('should return correct text for gradient', () => { - const linearResult = getPreviewText({ type: 'linear' }); + const linearResult = getPreviewText({ type: 'linear' } as Linear); expect(linearResult).toBe('Linear'); - const radialResult = getPreviewText({ type: 'radial' }); + const radialResult = getPreviewText({ type: 'radial' } as Radial); expect(radialResult).toBe('Radial'); }); }); diff --git a/packages/patterns/src/test/getSolidFromHex.js b/packages/patterns/src/test/getSolidFromHex.ts similarity index 100% rename from packages/patterns/src/test/getSolidFromHex.js rename to packages/patterns/src/test/getSolidFromHex.ts diff --git a/packages/patterns/src/test/hasOpacity.js b/packages/patterns/src/test/hasOpacity.ts similarity index 73% rename from packages/patterns/src/test/hasOpacity.js rename to packages/patterns/src/test/hasOpacity.ts index 691b3966e695..24c527244ca3 100644 --- a/packages/patterns/src/test/hasOpacity.js +++ b/packages/patterns/src/test/hasOpacity.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import { PatternType, Linear } from '@googleforcreators/types'; + /** * Internal dependencies */ @@ -29,20 +34,23 @@ describe('hasOpacity', () => { }); it('should return true for gradient with semitransparent stops', () => { - const pattern = { - type: 'linear', + const pattern: Linear = { + type: PatternType.Linear, stops: [ - { color: { r: 1, g: 1, b: 1 } }, - { color: { r: 1, g: 1, b: 1, a: 0.5 } }, + { color: { r: 1, g: 1, b: 1 }, position: 0 }, + { color: { r: 1, g: 1, b: 1, a: 0.5 }, position: 1 }, ], }; expect(hasOpacity(pattern)).toBeTrue(); }); it('should return true for gradient with opaque stops but overall opacity', () => { - const pattern = { - type: 'linear', - stops: [{ color: { r: 1, g: 1, b: 1 } }, { color: { r: 1, g: 1, b: 1 } }], + const pattern: Linear = { + type: PatternType.Linear, + stops: [ + { color: { r: 1, g: 1, b: 1 }, position: 0 }, + { color: { r: 1, g: 1, b: 1 }, position: 1 }, + ], alpha: 0.5, }; expect(hasOpacity(pattern)).toBeTrue(); diff --git a/packages/react/src/renderToStaticMarkup.ts b/packages/react/src/renderToStaticMarkup.ts index fba1fa60cc7a..374ec510b135 100644 --- a/packages/react/src/renderToStaticMarkup.ts +++ b/packages/react/src/renderToStaticMarkup.ts @@ -35,7 +35,9 @@ import type { ReactElement } from 'react'; * @param element React element. * @return Markup. */ -function renderToStaticMarkup(element: ReactElement) { +function renderToStaticMarkup( + element: ReactElement | ReactElement[] | null | string +): string { const originalConsoleError = console.error; console.error = function (error, ...args) { if ( @@ -47,7 +49,7 @@ function renderToStaticMarkup(element: ReactElement) { } }; - const markup = _renderToStaticMarkup(element); + const markup = _renderToStaticMarkup(element as ReactElement); console.error = originalConsoleError; diff --git a/packages/react/src/typings/index.d.ts b/packages/react/src/typings/global.d.ts similarity index 100% rename from packages/react/src/typings/index.d.ts rename to packages/react/src/typings/global.d.ts diff --git a/packages/react/src/typings/shallow-equal.d.ts b/packages/react/src/typings/shallow-equal/index.d.ts similarity index 100% rename from packages/react/src/typings/shallow-equal.d.ts rename to packages/react/src/typings/shallow-equal/index.d.ts diff --git a/packages/rich-text/src/formatters/test/_utils.js b/packages/rich-text/src/formatters/test/_utils.ts similarity index 87% rename from packages/rich-text/src/formatters/test/_utils.js rename to packages/rich-text/src/formatters/test/_utils.ts index b063021c22d8..dea413a3d157 100644 --- a/packages/rich-text/src/formatters/test/_utils.js +++ b/packages/rich-text/src/formatters/test/_utils.ts @@ -19,8 +19,8 @@ */ import { render } from '@googleforcreators/react'; -export function getDOMElement(jsx) { +export function getDOMElement(jsx: JSX.Element): HTMLElement { const el = document.createElement('div'); render(jsx, el); - return el.firstChild; + return el.firstChild as HTMLElement; } diff --git a/packages/rich-text/src/formatters/test/color.js b/packages/rich-text/src/formatters/test/color.tsx similarity index 78% rename from packages/rich-text/src/formatters/test/color.js rename to packages/rich-text/src/formatters/test/color.tsx index f6c3b16af5ed..490f679099db 100644 --- a/packages/rich-text/src/formatters/test/color.js +++ b/packages/rich-text/src/formatters/test/color.tsx @@ -18,6 +18,8 @@ * External dependencies */ import { createSolid } from '@googleforcreators/patterns'; +import type { EditorState } from 'draft-js'; +import type { OrderedSet } from 'immutable'; /** * Internal dependencies @@ -28,6 +30,7 @@ import { } from '../../styleManipulation'; import { NONE, COLOR, MULTIPLE_VALUE } from '../../customConstants'; import formatter from '../color'; +import type { SetStyleCallback, StyleGetter } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -41,16 +44,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Color formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -87,19 +90,23 @@ describe('Color formatter', () => { describe('stylesToCSS', () => { it('should ignore styles without a color style', () => { - const css = stylesToCSS(['NOT-COLOR', 'ALSO-NOT-COLOR']); + const css = stylesToCSS({} as OrderedSet); expect(css).toBeNull(); }); it('should ignore invalid color style', () => { - const css = stylesToCSS([`${COLOR}-invalid`]); + const css = stylesToCSS({ + toArray: () => [`${COLOR}-invalid`], + } as OrderedSet); expect(css).toBeNull(); }); it('should return correct CSS for a valid color style', () => { - const css = stylesToCSS([`${COLOR}-ff000032`]); + const css = stylesToCSS({ + toArray: () => [`${COLOR}-ff000032`], + } as OrderedSet); expect(css).toStrictEqual({ color: 'rgba(255,0,0,0.5)' }); }); @@ -113,13 +120,15 @@ describe('Color formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.color(state); + getters.color(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith(state, COLOR); }); - function setupFormatter(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.color({}); + function setupFormatter(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.color({} as EditorState); } it('should return multiple if more than one style matches', () => { @@ -148,7 +157,7 @@ describe('Color formatter', () => { }); it('should invoke togglePrefixStyle correctly with non-black color', () => { - const state = {}; + const state: EditorState = {} as EditorState; const color = createSolid(255, 0, 255); setters.setColor(state, color); expect(togglePrefixStyle).toHaveBeenCalledWith( @@ -159,21 +168,24 @@ describe('Color formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); // Fourth argument is actual style to set - const styleToSet = togglePrefixStyle.mock.calls[0][3]; + const styleToSet = jest.mocked(togglePrefixStyle).mock + .calls[0][3] as StyleGetter; expect(styleToSet()).toBe(`${COLOR}-ff00ff64`); }); it('should invoke togglePrefixStyle correctly with black color', () => { const state = {}; const color = createSolid(0, 0, 0); - setters.setColor(state, color); + setters.setColor(state as EditorState, color); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as StyleGetter; expect(shouldSetStyle()).toBeFalse(); // Fourth argument is ignored diff --git a/packages/rich-text/src/formatters/test/italic.js b/packages/rich-text/src/formatters/test/italic.tsx similarity index 75% rename from packages/rich-text/src/formatters/test/italic.js rename to packages/rich-text/src/formatters/test/italic.tsx index c8b2d0c8bea8..4ca6f11ae61e 100644 --- a/packages/rich-text/src/formatters/test/italic.js +++ b/packages/rich-text/src/formatters/test/italic.tsx @@ -14,15 +14,22 @@ * limitations under the License. */ +/** + * External dependencies + */ +import type { EditorState } from 'draft-js'; +import type { OrderedSet } from 'immutable'; + /** * Internal dependencies */ import { - togglePrefixStyle, getPrefixStylesInSelection, + togglePrefixStyle, } from '../../styleManipulation'; -import { NONE, ITALIC } from '../../customConstants'; +import { ITALIC, NONE } from '../../customConstants'; import formatter from '../italic'; +import type { SetStyleCallback } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -36,16 +43,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Italic formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -66,21 +73,23 @@ describe('Italic formatter', () => { it('should detect italic from span elements and return correct style', () => { const element = ; const style = setupFormatter(element); - const expected = ITALIC; - - expect(style).toBe(expected); + expect(style).toBe(ITALIC); }); }); describe('stylesToCSS', () => { it('should ignore styles without italic style', () => { - const css = stylesToCSS(['NOT-ITALIC', 'ALSO-NOT-ITALIC']); + const css = stylesToCSS({ + toArray: () => ['NOT-ITALIC', 'ALSO-NOT-ITALIC'], + } as OrderedSet); expect(css).toBeNull(); }); it('should return correct CSS if italic is present', () => { - const css = stylesToCSS([ITALIC]); + const css = stylesToCSS({ + toArray: () => [ITALIC], + } as OrderedSet); expect(css).toStrictEqual({ fontStyle: 'italic' }); }); @@ -94,13 +103,15 @@ describe('Italic formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.isItalic(state); + getters.isItalic(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith(state, ITALIC); }); - function setupFormatter(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.isItalic({}); + function setupFormatter(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.isItalic({} as EditorState); } it('should return false if both italic and non-italic', () => { @@ -130,13 +141,13 @@ describe('Italic formatter', () => { it('should invoke togglePrefixStyle with state and prefix', () => { const state = {}; - setters.toggleItalic(state); + setters.toggleItalic(state as EditorState); expect(togglePrefixStyle).toHaveBeenCalledWith(state, ITALIC); }); it('should invoke togglePrefixStyle correctly for explicitly setting italic to false', () => { const state = {}; - setters.toggleItalic(state, false); + setters.toggleItalic(state as EditorState, false); expect(togglePrefixStyle).toHaveBeenCalledWith( state, ITALIC, @@ -144,13 +155,14 @@ describe('Italic formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); it('should invoke togglePrefixStyle correctly for explicitly setting italic to true', () => { const state = {}; - setters.toggleItalic(state, true); + setters.toggleItalic(state as EditorState, true); expect(togglePrefixStyle).toHaveBeenCalledWith( state, ITALIC, @@ -158,7 +170,8 @@ describe('Italic formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); }); }); diff --git a/packages/rich-text/src/formatters/test/letterSpacing.js b/packages/rich-text/src/formatters/test/letterSpacing.tsx similarity index 76% rename from packages/rich-text/src/formatters/test/letterSpacing.js rename to packages/rich-text/src/formatters/test/letterSpacing.tsx index be1389f829ff..4bcc325754e7 100644 --- a/packages/rich-text/src/formatters/test/letterSpacing.js +++ b/packages/rich-text/src/formatters/test/letterSpacing.tsx @@ -13,6 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** + * External dependencies + */ +import type { EditorState } from 'draft-js'; +import { OrderedSet } from 'immutable'; + /** * Internal dependencies */ @@ -22,6 +29,7 @@ import { } from '../../styleManipulation'; import { NONE, LETTERSPACING, MULTIPLE_VALUE } from '../../customConstants'; import formatter from '../letterSpacing'; +import type { SetStyleCallback, StyleGetter } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -35,16 +43,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Color formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -73,25 +81,27 @@ describe('Color formatter', () => { describe('stylesToCSS', () => { it('should ignore styles without a letter spacing style', () => { - const css = stylesToCSS(['NOT-LETTERSPACING', 'ALSO-NOT-LETTERSPACING']); + const css = stylesToCSS( + OrderedSet.of('NOT-LETTERSPACING', 'ALSO-NOT-LETTERSPACING') + ); expect(css).toBeNull(); }); it('should ignore invalid letter spacing style', () => { - const css = stylesToCSS([`${LETTERSPACING}-invalid`]); + const css = stylesToCSS(OrderedSet.of(`${LETTERSPACING}-invalid`)); expect(css).toBeNull(); }); it('should return correct CSS for a positive style', () => { - const css = stylesToCSS([`${LETTERSPACING}-150`]); + const css = stylesToCSS(OrderedSet.of(`${LETTERSPACING}-150`)); expect(css).toStrictEqual({ letterSpacing: '1.5em' }); }); it('should return correct CSS for a negative style', () => { - const css = stylesToCSS([`${LETTERSPACING}-N250`]); + const css = stylesToCSS(OrderedSet.of(`${LETTERSPACING}-N250`)); expect(css).toStrictEqual({ letterSpacing: '-2.5em' }); }); @@ -105,16 +115,18 @@ describe('Color formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.letterSpacing(state); + getters.letterSpacing(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith( state, LETTERSPACING ); }); - function setupFormatter(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.letterSpacing({}); + function setupFormatter(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.letterSpacing({} as EditorState); } it('should return multiple if more than one style matches', () => { @@ -145,7 +157,7 @@ describe('Color formatter', () => { it('should invoke togglePrefixStyle with state and prefix', () => { const state = {}; const letterSpacing = 0; - setters.setLetterSpacing(state, letterSpacing); + setters.setLetterSpacing(state as EditorState, letterSpacing); expect(togglePrefixStyle).toHaveBeenCalledWith( state, LETTERSPACING, @@ -158,10 +170,11 @@ describe('Color formatter', () => { const state = {}; // 0 letter spacing is the trivial case, that doesn't need to be added const letterSpacing = 0; - setters.setLetterSpacing(state, letterSpacing); + setters.setLetterSpacing(state as EditorState, letterSpacing); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); @@ -169,14 +182,16 @@ describe('Color formatter', () => { const state = {}; // A non-zero letter spacing should be added as a style const letterSpacing = -150; - setters.setLetterSpacing(state, letterSpacing); + setters.setLetterSpacing(state as EditorState, letterSpacing); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); // Fourth argument is actual style to set - const styleToSet = togglePrefixStyle.mock.calls[0][3]; + const styleToSet = jest.mocked(togglePrefixStyle).mock + .calls[0][3] as StyleGetter; expect(styleToSet()).toBe(`${LETTERSPACING}-N150`); }); }); diff --git a/packages/rich-text/src/formatters/test/underline.js b/packages/rich-text/src/formatters/test/underline.tsx similarity index 76% rename from packages/rich-text/src/formatters/test/underline.js rename to packages/rich-text/src/formatters/test/underline.tsx index 1780dc18ceb8..89abf1714426 100644 --- a/packages/rich-text/src/formatters/test/underline.js +++ b/packages/rich-text/src/formatters/test/underline.tsx @@ -14,15 +14,22 @@ * limitations under the License. */ +/** + * External dependencies + */ +import type { EditorState } from 'draft-js'; +import type { OrderedSet } from 'immutable'; + /** * Internal dependencies */ import { - togglePrefixStyle, getPrefixStylesInSelection, + togglePrefixStyle, } from '../../styleManipulation'; import { NONE, UNDERLINE } from '../../customConstants'; import formatter from '../underline'; +import type { SetStyleCallback } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -36,16 +43,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Underline formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -66,21 +73,23 @@ describe('Underline formatter', () => { it('should detect underline from span elements and return correct style', () => { const element = ; const style = setupFormatter(element); - const expected = UNDERLINE; - - expect(style).toBe(expected); + expect(style).toBe(UNDERLINE); }); }); describe('stylesToCSS', () => { it('should ignore styles without underline style', () => { - const css = stylesToCSS(['NOT-UNDERLINE', 'ALSO-NOT-UNDERLINE']); + const css = stylesToCSS({ + toArray: () => ['NOT-UNDERLINE', 'ALSO-NOT-UNDERLINE'], + } as OrderedSet); expect(css).toBeNull(); }); it('should return correct CSS if underline is present', () => { - const css = stylesToCSS([UNDERLINE]); + const css = stylesToCSS({ + toArray: () => [UNDERLINE], + } as OrderedSet); expect(css).toStrictEqual({ textDecoration: 'underline' }); }); @@ -94,13 +103,15 @@ describe('Underline formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.isUnderline(state); + getters.isUnderline(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith(state, UNDERLINE); }); - function setupFormatter(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.isUnderline({}); + function setupFormatter(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.isUnderline({} as EditorState); } it('should return false if both underline and non-underline', () => { @@ -130,13 +141,13 @@ describe('Underline formatter', () => { it('should invoke togglePrefixStyle with state and prefix', () => { const state = {}; - setters.toggleUnderline(state); + setters.toggleUnderline(state as EditorState); expect(togglePrefixStyle).toHaveBeenCalledWith(state, UNDERLINE); }); it('should invoke togglePrefixStyle correctly for explicitly setting underline to false', () => { const state = {}; - setters.toggleUnderline(state, false); + setters.toggleUnderline(state as EditorState, false); expect(togglePrefixStyle).toHaveBeenCalledWith( state, UNDERLINE, @@ -144,13 +155,14 @@ describe('Underline formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); it('should invoke togglePrefixStyle correctly for explicitly setting underline to true', () => { const state = {}; - setters.toggleUnderline(state, true); + setters.toggleUnderline(state as EditorState, true); expect(togglePrefixStyle).toHaveBeenCalledWith( state, UNDERLINE, @@ -158,7 +170,8 @@ describe('Underline formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); }); }); diff --git a/packages/rich-text/src/formatters/test/uppercase.js b/packages/rich-text/src/formatters/test/uppercase.tsx similarity index 76% rename from packages/rich-text/src/formatters/test/uppercase.js rename to packages/rich-text/src/formatters/test/uppercase.tsx index 2faa633faef5..a783195cf9f0 100644 --- a/packages/rich-text/src/formatters/test/uppercase.js +++ b/packages/rich-text/src/formatters/test/uppercase.tsx @@ -14,15 +14,22 @@ * limitations under the License. */ +/** + * External dependencies + */ +import type { OrderedSet } from 'immutable'; +import type { EditorState } from 'draft-js'; + /** * Internal dependencies */ import { - togglePrefixStyle, getPrefixStylesInSelection, + togglePrefixStyle, } from '../../styleManipulation'; import { NONE, UPPERCASE } from '../../customConstants'; import formatter from '../uppercase'; +import type { SetStyleCallback } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -36,16 +43,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Uppercase formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -66,21 +73,23 @@ describe('Uppercase formatter', () => { it('should detect uppercase from span elements and return correct style', () => { const element = ; const style = setupFormatter(element); - const expected = UPPERCASE; - - expect(style).toBe(expected); + expect(style).toBe(UPPERCASE); }); }); describe('stylesToCSS', () => { it('should ignore styles without uppercase style', () => { - const css = stylesToCSS(['NOT-UPPERCASE', 'ALSO-NOT-UPPERCASE']); + const css = stylesToCSS({ + toArray: () => ['NOT-UPPERCASE', 'ALSO-NOT-UPPERCASE'], + } as OrderedSet); expect(css).toBeNull(); }); it('should return correct CSS if uppercase is present', () => { - const css = stylesToCSS([UPPERCASE]); + const css = stylesToCSS({ + toArray: () => [UPPERCASE], + } as OrderedSet); expect(css).toStrictEqual({ textTransform: 'uppercase' }); }); @@ -94,13 +103,15 @@ describe('Uppercase formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.isUppercase(state); + getters.isUppercase(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith(state, UPPERCASE); }); - function setupFormatter(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.isUppercase({}); + function setupFormatter(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.isUppercase({} as EditorState); } it('should return false if both uppercase and non-uppercase', () => { @@ -130,13 +141,13 @@ describe('Uppercase formatter', () => { it('should invoke togglePrefixStyle with state and prefix', () => { const state = {}; - setters.toggleUppercase(state); + setters.toggleUppercase(state as EditorState); expect(togglePrefixStyle).toHaveBeenCalledWith(state, UPPERCASE); }); it('should invoke togglePrefixStyle correctly for explicitly setting uppercase to false', () => { const state = {}; - setters.toggleUppercase(state, false); + setters.toggleUppercase(state as EditorState, false); expect(togglePrefixStyle).toHaveBeenCalledWith( state, UPPERCASE, @@ -144,13 +155,14 @@ describe('Uppercase formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); it('should invoke togglePrefixStyle correctly for explicitly setting uppercase to true', () => { const state = {}; - setters.toggleUppercase(state, true); + setters.toggleUppercase(state as EditorState, true); expect(togglePrefixStyle).toHaveBeenCalledWith( state, UPPERCASE, @@ -158,7 +170,8 @@ describe('Uppercase formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); }); }); diff --git a/packages/rich-text/src/formatters/test/weight.js b/packages/rich-text/src/formatters/test/weight.tsx similarity index 74% rename from packages/rich-text/src/formatters/test/weight.js rename to packages/rich-text/src/formatters/test/weight.tsx index f597d029c089..73e48fd54894 100644 --- a/packages/rich-text/src/formatters/test/weight.js +++ b/packages/rich-text/src/formatters/test/weight.tsx @@ -13,6 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** + * External dependencies + */ +import type { EditorState } from 'draft-js'; +import type { OrderedSet } from 'immutable'; + /** * Internal dependencies */ @@ -22,6 +29,7 @@ import { } from '../../styleManipulation'; import { NONE, WEIGHT, MULTIPLE_VALUE } from '../../customConstants'; import formatter from '../weight'; +import type { SetStyleCallback, StyleGetter } from '../../types'; import { getDOMElement } from './_utils'; jest.mock('../../styleManipulation', () => { @@ -35,16 +43,16 @@ const { elementToStyle, stylesToCSS, getters, setters } = formatter; describe('Color formatter', () => { beforeAll(() => { - getPrefixStylesInSelection.mockImplementation(() => [NONE]); + jest.mocked(getPrefixStylesInSelection).mockImplementation(() => [NONE]); }); beforeEach(() => { - togglePrefixStyle.mockClear(); - getPrefixStylesInSelection.mockClear(); + jest.mocked(togglePrefixStyle).mockClear(); + jest.mocked(getPrefixStylesInSelection).mockClear(); }); describe('elementToStyle', () => { - function setupFormatter(element) { + function setupFormatter(element: JSX.Element) { return elementToStyle(getDOMElement(element)); } @@ -73,19 +81,25 @@ describe('Color formatter', () => { describe('stylesToCSS', () => { it('should ignore styles without a font weight style', () => { - const css = stylesToCSS(['NOT-WEIGHT', 'ALSO-NOT-WEIGHT']); + const css = stylesToCSS({ + toArray: () => ['NOT-WEIGHT', 'ALSO-NOT-WEIGHT'], + } as OrderedSet); expect(css).toBeNull(); }); it('should ignore invalid font weight style', () => { - const css = stylesToCSS([`${WEIGHT}-invalid`]); + const css = stylesToCSS({ + toArray: () => [`${WEIGHT}-invalid`], + } as OrderedSet); expect(css).toBeNull(); }); it('should return correct CSS for a valid style', () => { - const css = stylesToCSS([`${WEIGHT}-500`]); + const css = stylesToCSS({ + toArray: () => [`${WEIGHT}-500`], + } as OrderedSet); expect(css).toStrictEqual({ fontWeight: 500 }); }); @@ -100,13 +114,15 @@ describe('Color formatter', () => { it('should invoke getPrefixStylesInSelection with given state and correct style prefix', () => { const state = {}; - getters.fontWeight(state); + getters.fontWeight(state as EditorState); expect(getPrefixStylesInSelection).toHaveBeenCalledWith(state, WEIGHT); }); - function setupFontWeight(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.fontWeight({}); + function setupFontWeight(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.fontWeight({} as EditorState); } it('should return multiple if more than one style matches', () => { @@ -127,9 +143,11 @@ describe('Color formatter', () => { expect(result).toBe(700); }); - function setupIsBold(styleArray) { - getPrefixStylesInSelection.mockImplementationOnce(() => styleArray); - return getters.isBold({}); + function setupIsBold(styleArray: string[]) { + jest + .mocked(getPrefixStylesInSelection) + .mockImplementationOnce(() => styleArray); + return getters.isBold({} as EditorState); } it('should return false if mix of bold and non-bold', () => { @@ -161,7 +179,7 @@ describe('Color formatter', () => { it('should invoke togglePrefixStyle with state and prefix', () => { const state = {}; const weight = 0; - setters.setFontWeight(state, weight); + setters.setFontWeight(state as EditorState, weight); expect(togglePrefixStyle).toHaveBeenCalledWith( state, WEIGHT, @@ -174,10 +192,11 @@ describe('Color formatter', () => { const state = {}; // 400 font weight is the trivial case, that doesn't need to be added const weight = 400; - setters.setFontWeight(state, weight); + setters.setFontWeight(state as EditorState, weight); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); @@ -185,20 +204,22 @@ describe('Color formatter', () => { const state = {}; // A non-400 font weight should be added as a style const weight = 900; - setters.setFontWeight(state, weight); + setters.setFontWeight(state as EditorState, weight); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); // Fourth argument is actual style to set - const styleToSet = togglePrefixStyle.mock.calls[0][3]; + const styleToSet = jest.mocked(togglePrefixStyle).mock + .calls[0][3] as StyleGetter; expect(styleToSet()).toBe(`${WEIGHT}-900`); }); it('should invoke togglePrefixStyle correctly for explicitly setting bold to false', () => { const state = {}; - setters.toggleBold(state, false); + setters.toggleBold(state as EditorState, false); expect(togglePrefixStyle).toHaveBeenCalledWith( state, WEIGHT, @@ -206,13 +227,14 @@ describe('Color formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeFalse(); }); it('should invoke togglePrefixStyle correctly for explicitly setting bold to true', () => { const state = {}; - setters.toggleBold(state, true); + setters.toggleBold(state as EditorState, true); expect(togglePrefixStyle).toHaveBeenCalledWith( state, WEIGHT, @@ -221,17 +243,19 @@ describe('Color formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle()).toBeTrue(); // Fourth argument is actual style to set - const styleToSet = togglePrefixStyle.mock.calls[0][3]; + const styleToSet = jest.mocked(togglePrefixStyle).mock + .calls[0][3] as SetStyleCallback; expect(styleToSet()).toBe(`${WEIGHT}-700`); }); it('should correctly determine if setting bold when toggling without explicit flag', () => { const state = {}; - setters.toggleBold(state); + setters.toggleBold(state as EditorState); expect(togglePrefixStyle).toHaveBeenCalledWith( state, WEIGHT, @@ -240,13 +264,15 @@ describe('Color formatter', () => { ); // Third argument is tester - const shouldSetStyle = togglePrefixStyle.mock.calls[0][2]; + const shouldSetStyle = jest.mocked(togglePrefixStyle).mock + .calls[0][2] as SetStyleCallback; expect(shouldSetStyle([NONE])).toBeTrue(); expect(shouldSetStyle([`${WEIGHT}-300`, `${WEIGHT}-900`])).toBeTrue(); expect(shouldSetStyle([`${WEIGHT}-600`, `${WEIGHT}-900`])).toBeFalse(); // Fourth argument is actual style to set - const styleToSet = togglePrefixStyle.mock.calls[0][3]; + const styleToSet = jest.mocked(togglePrefixStyle).mock + .calls[0][3] as StyleGetter; expect(styleToSet([NONE])).toBe(`${WEIGHT}-700`); expect(styleToSet([`${WEIGHT}-300`, `${WEIGHT}-600`])).toBe( `${WEIGHT}-700` diff --git a/packages/rich-text/src/formatters/weight.ts b/packages/rich-text/src/formatters/weight.ts index 09c7d9ce18cf..8503e80108ad 100644 --- a/packages/rich-text/src/formatters/weight.ts +++ b/packages/rich-text/src/formatters/weight.ts @@ -93,12 +93,12 @@ function toggleBold(editorState: EditorState, flag?: undefined | boolean) { // if any character has weight less than SMALLEST_BOLD, // everything should be bolded - const shouldSetBold = (styles: string[]) => + const shouldSetBold = (styles: string[] = []) => getWeights(styles).some((w) => w < SMALLEST_BOLD); // if setting a bold, it should be the boldest current weight, // though at least DEFAULT_BOLD - const getBoldToSet = (styles: string[]) => + const getBoldToSet = (styles: string[] = []) => weightToStyle(Math.max(...[DEFAULT_BOLD].concat(getWeights(styles)))); return togglePrefixStyle(editorState, WEIGHT, shouldSetBold, getBoldToSet); diff --git a/packages/rich-text/src/styleManipulation.ts b/packages/rich-text/src/styleManipulation.ts index 16cbf9d7f02f..8a3f568ff095 100644 --- a/packages/rich-text/src/styleManipulation.ts +++ b/packages/rich-text/src/styleManipulation.ts @@ -17,8 +17,8 @@ /** * External dependencies */ -import { Modifier, EditorState } from 'draft-js'; import type { ContentState } from 'draft-js'; +import { EditorState, Modifier } from 'draft-js'; /** * Internal dependencies @@ -125,22 +125,21 @@ function applyContent(editorState: EditorState, contentState: ContentState) { * it's probably easiest to understand how it works by following the inline * comments and reading through the corresponding exhaustive unit tests. * - * @param {Object} editorState Current editor state - * @param {string} prefix Style (prefix) to remove from state and potentially + * @param editorState Current editor state + * @param prefix Style (prefix) to remove from state and potentially * replace with different style - * @param {Function} shouldSetStyle Optional function to get if new style + * @param shouldSetStyle Optional function to get if new style * should be added or not - * @param {Function} getStyleToSet Optional function to get what new style + * @param getStyleToSet Optional function to get what new style * should be added - * @return {Object} New editor state + * @return New editor state */ - export function togglePrefixStyle( editorState: EditorState, prefix: string, shouldSetStyle: SetStyleCallback | null = null, getStyleToSet: StyleGetter | null = null -) { +): EditorState { if (editorState.getSelection().isCollapsed()) { // A different set of rules apply here // First find all styles that apply at cursor - we'll reapply those as override @@ -167,11 +166,7 @@ export function togglePrefixStyle( } // Finally apply to style override - const newState = EditorState.setInlineStyleOverride( - editorState, - inlineStyles - ); - return newState; + return EditorState.setInlineStyleOverride(editorState, inlineStyles); } const matchingStyles = getPrefixStylesInSelection(editorState, prefix); @@ -202,7 +197,7 @@ export function togglePrefixStyle( } // Add style to entire selection - // If no function is given, we simple add the prefix as a style + // If no function is given, we simply add the prefix as a style const styleToSet = getStyleToSet ? getStyleToSet(matchingStyles) : prefix; const newContentState = Modifier.applyInlineStyle( strippedContentState, diff --git a/packages/rich-text/src/test/getFontVariants.js b/packages/rich-text/src/test/getFontVariants.ts similarity index 96% rename from packages/rich-text/src/test/getFontVariants.js rename to packages/rich-text/src/test/getFontVariants.ts index 982860d92def..59b087508c5f 100644 --- a/packages/rich-text/src/test/getFontVariants.js +++ b/packages/rich-text/src/test/getFontVariants.ts @@ -19,7 +19,7 @@ */ import getFontVariants from '../getFontVariants'; -describe('getfontVariants', () => { +describe('getFontVariants', () => { it('should produce correct variants', () => { const htmlContent = 'Fill in some text'; diff --git a/packages/rich-text/src/test/getPastedBlocks.js b/packages/rich-text/src/test/getPastedBlocks.ts similarity index 97% rename from packages/rich-text/src/test/getPastedBlocks.js rename to packages/rich-text/src/test/getPastedBlocks.ts index c1aa650d7867..43a3e414d706 100644 --- a/packages/rich-text/src/test/getPastedBlocks.js +++ b/packages/rich-text/src/test/getPastedBlocks.ts @@ -17,7 +17,7 @@ /** * External dependencies */ -import { EditorState, ContentState } from 'draft-js'; +import { EditorState, ContentState, BlockMap } from 'draft-js'; /** * Internal dependencies @@ -26,7 +26,7 @@ import getPastedBlocks from '../getPastedBlocks'; import customExport from '../customExport'; describe('getPastedBlocks', () => { - function blockMapToHTML(blockMap) { + function blockMapToHTML(blockMap: BlockMap) { const blockArray = blockMap.toArray(); const contentState = ContentState.createFromBlockArray(blockArray); const editorState = EditorState.createWithContent(contentState); diff --git a/packages/rich-text/src/test/styleManipulation.js b/packages/rich-text/src/test/styleManipulation.ts similarity index 88% rename from packages/rich-text/src/test/styleManipulation.js rename to packages/rich-text/src/test/styleManipulation.ts index 8774275f5f02..f242791be371 100644 --- a/packages/rich-text/src/test/styleManipulation.js +++ b/packages/rich-text/src/test/styleManipulation.ts @@ -17,11 +17,17 @@ /** * External dependencies */ -import { convertFromRaw, EditorState, SelectionState } from 'draft-js'; +import { + convertFromRaw, + EditorState, + RawDraftContentState, + SelectionState, +} from 'draft-js'; /** * Internal dependencies */ +import type { OrderedSet } from 'immutable'; import { getPrefixStyleForCharacter, getPrefixStylesInSelection, @@ -29,50 +35,63 @@ import { } from '../styleManipulation'; expect.extend({ - toHaveStyleAtCursor(received, style) { + toHaveStyleAtCursor(received: EditorState, style: string) { const styles = received.getCurrentInlineStyle().toArray(); + const stylesList = styles.join(', '); const pass = styles.includes(style); if (pass) { return { - message: () => `expected ${styles} to not include ${style}`, + message: () => `expected ${stylesList} to not include ${style}`, pass: true, }; } else { return { - message: () => `expected ${styles} to include ${style}`, + message: () => `expected ${stylesList} to include ${style}`, pass: false, }; } }, - toHaveStyleInSelection(received, style, stylePrefix = null) { + toHaveStyleInSelection( + received: EditorState, + style: string, + stylePrefix: string | null = null + ) { stylePrefix = stylePrefix ?? style; const styles = getPrefixStylesInSelection(received, stylePrefix); + const stylesList = styles.join(', '); const pass = styles.includes(style); if (pass) { return { - message: () => `expected selection ${styles} to not include ${style}`, + message: () => + `expected selection ${stylesList} to not include ${style}`, pass: true, }; } else { return { - message: () => `expected selection ${styles} to include ${style}`, + message: () => `expected selection ${stylesList} to include ${style}`, pass: false, }; } }, - toHaveStyleInEntireSelection(received, style, stylePrefix = null) { + toHaveStyleInEntireSelection( + received: EditorState, + style: string, + stylePrefix: string | null = null + ) { stylePrefix = stylePrefix ?? style; const styles = getPrefixStylesInSelection(received, stylePrefix); + const stylesList = styles.join(', '); const pass = styles.includes(style) && styles.length === 1; if (pass) { return { message: () => - `expected selection ${styles} to not only include ${style}`, + `expected selection ${stylesList} to not only include ${style}`, pass: true, }; } else { return { - message: () => `expected selection ${styles} to only include ${style}`, + message: () => + `expected selection ${stylesList} to only include ${style}`, pass: false, }; } @@ -82,7 +101,7 @@ expect.extend({ describe('getPrefixStyleForCharacter', () => { it('should return a direct match', () => { const match = getPrefixStyleForCharacter( - { toArray: () => ['ALPHA', 'BRAVO', 'CHARLIE'] }, + { toArray: () => ['ALPHA', 'BRAVO', 'CHARLIE'] } as OrderedSet, 'BRAVO' ); expect(match).toBe('BRAVO'); @@ -90,7 +109,9 @@ describe('getPrefixStyleForCharacter', () => { it('should return a prefix match', () => { const match = getPrefixStyleForCharacter( - { toArray: () => ['ALPHA-1', 'BRAVO-2', 'CHARLIE-3'] }, + { + toArray: () => ['ALPHA-1', 'BRAVO-2', 'CHARLIE-3'], + } as OrderedSet, 'BRAVO' ); expect(match).toBe('BRAVO-2'); @@ -98,7 +119,9 @@ describe('getPrefixStyleForCharacter', () => { it('should return first match if multiple', () => { const match = getPrefixStyleForCharacter( - { toArray: () => ['ALPHA-1', 'BRAVO-2', 'BRAVO-3'] }, + { + toArray: () => ['ALPHA-1', 'BRAVO-2', 'BRAVO-3'], + } as OrderedSet, 'BRAVO' ); expect(match).toBe('BRAVO-2'); @@ -106,7 +129,9 @@ describe('getPrefixStyleForCharacter', () => { it('should return NONE if no match', () => { const match = getPrefixStyleForCharacter( - { toArray: () => ['ALPHA-1', 'BRAVO-2', 'CHARLIE-3'] }, + { + toArray: () => ['ALPHA-1', 'BRAVO-2', 'CHARLIE-3'], + } as OrderedSet, 'DELTA' ); expect(match).toBe('NONE'); @@ -358,8 +383,11 @@ describe('togglePrefixStyle', () => { * 6. "Wo" is bold (700) * 7. "rld" is black (900) */ -function getEditorState(selectionStart, selectionEnd = null) { - const raw = { +function getEditorState( + selectionStart: number, + selectionEnd: number | null = null +) { + const raw: RawDraftContentState = { blocks: [ { key: '65t0d', diff --git a/packages/rich-text/src/types.ts b/packages/rich-text/src/types.ts index 4c84e6c6f15e..5e0429925d94 100644 --- a/packages/rich-text/src/types.ts +++ b/packages/rich-text/src/types.ts @@ -28,8 +28,8 @@ export type StyleSetter = ( arg: AllowedSetterArgs ) => EditorState; -export type SetStyleCallback = (styles: string[]) => unknown; -export type StyleGetter = (styles: string[]) => string; +export type SetStyleCallback = (styles?: string[]) => unknown; +export type StyleGetter = (styles?: string[]) => string; export interface SelectionInfo { isBold: boolean; diff --git a/packages/rich-text/src/typings/jest.d.ts b/packages/rich-text/src/typings/jest.d.ts new file mode 100644 index 000000000000..7d6daf701930 --- /dev/null +++ b/packages/rich-text/src/typings/jest.d.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +declare global { + namespace jest { + interface Matchers { + toHaveStyleAtCursor(style: string): R; + toHaveStyleInSelection(style: string, stylePrefix?: string | null): R; + toHaveStyleInEntireSelection( + style: string, + stylePrefix?: string | null + ): R; + } + } +} + +export {}; diff --git a/packages/stickers/tsconfig.json b/packages/stickers/tsconfig.json index 409e9ab59df8..77d8f8d2615a 100644 --- a/packages/stickers/tsconfig.json +++ b/packages/stickers/tsconfig.json @@ -4,6 +4,6 @@ "rootDir": "src", "declarationDir": "dist-types" }, - "references": [{ "path": "../react" }], + "references": [{ "path": "../i18n" }, { "path": "../react" }], "include": ["src/**/*"] } diff --git a/packages/story-editor/src/app/media/utils/getResourceFromMedia3p.js b/packages/story-editor/src/app/media/utils/getResourceFromMedia3p.js index 411ef490fa4a..97954a5cbab3 100644 --- a/packages/story-editor/src/app/media/utils/getResourceFromMedia3p.js +++ b/packages/story-editor/src/app/media/utils/getResourceFromMedia3p.js @@ -116,7 +116,6 @@ function getImageUrls(m) { * @param {Media3pMedia} m The Media3P Media object * @return {Object} The array of "sizes"-type objects. */ - function getGifUrls(m) { // The rest of the application expects 3 named "sizes": "full", "large" and // "web_stories_thumbnail". We use the biggest as "full", the next biggest diff --git a/packages/tracking/src/shared.ts b/packages/tracking/src/shared.ts index e56e09a6933d..3622aca5ba80 100644 --- a/packages/tracking/src/shared.ts +++ b/packages/tracking/src/shared.ts @@ -30,7 +30,7 @@ interface ConfigParams { custom_map?: Record; } -interface ControlParams { +export interface ControlParams { groups?: string | string[] | undefined; send_to?: string | string[] | undefined; event_callback?: (() => void) | undefined; diff --git a/packages/tracking/src/test/disableTracking.js b/packages/tracking/src/test/disableTracking.ts similarity index 100% rename from packages/tracking/src/test/disableTracking.js rename to packages/tracking/src/test/disableTracking.ts diff --git a/packages/tracking/src/test/enableTracking.js b/packages/tracking/src/test/enableTracking.ts similarity index 100% rename from packages/tracking/src/test/enableTracking.js rename to packages/tracking/src/test/enableTracking.ts diff --git a/packages/tracking/src/test/getTimeTracker.js b/packages/tracking/src/test/getTimeTracker.ts similarity index 93% rename from packages/tracking/src/test/getTimeTracker.js rename to packages/tracking/src/test/getTimeTracker.ts index 9c941a18ce79..a5f57b455030 100644 --- a/packages/tracking/src/test/getTimeTracker.js +++ b/packages/tracking/src/test/getTimeTracker.ts @@ -32,12 +32,12 @@ describe('getTimeTracker', () => { afterEach(() => { config.trackingAllowed = false; config.trackingEnabled = false; - config.appName = undefined; + config.appName = ''; jest.clearAllMocks(); }); - it('sends two separate tracking events', async () => { + it('sends two separate tracking events', () => { config.appName = 'Foo App'; config.trackingAllowed = true; config.trackingEnabled = true; @@ -45,7 +45,7 @@ describe('getTimeTracker', () => { config.trackingIdGA4 = 'G-ABC1234567'; const trackTime = getTimeTracker('load_dependencies'); - await trackTime(); + trackTime(); expect(trackEvent).toHaveBeenCalledTimes(2); expect(trackEvent).toHaveBeenNthCalledWith(1, 'timing_complete', { diff --git a/packages/tracking/src/test/gtag.js b/packages/tracking/src/test/gtag.ts similarity index 94% rename from packages/tracking/src/test/gtag.js rename to packages/tracking/src/test/gtag.ts index 885bdbe982de..5ac813716d4d 100644 --- a/packages/tracking/src/test/gtag.js +++ b/packages/tracking/src/test/gtag.ts @@ -22,8 +22,8 @@ import { DATA_LAYER } from '../constants'; describe('gtag', () => { it('should push data to the data layer', () => { - gtag('Foo', 'Bar'); - gtag('Bar', 'Baz'); + gtag('event', 'Bar'); + gtag('event', 'Baz'); expect(window[DATA_LAYER]).toHaveLength(2); }); }); diff --git a/packages/tracking/src/test/initializeTracking.js b/packages/tracking/src/test/initializeTracking.ts similarity index 96% rename from packages/tracking/src/test/initializeTracking.js rename to packages/tracking/src/test/initializeTracking.ts index 6994871784f5..268da62c3fbe 100644 --- a/packages/tracking/src/test/initializeTracking.js +++ b/packages/tracking/src/test/initializeTracking.ts @@ -24,7 +24,7 @@ import initializeTracking from '../initializeTracking'; describe('initializeTracking', () => { afterEach(() => { - config.trackingId = undefined; + config.trackingId = ''; }); it('sets app name in config', async () => { diff --git a/packages/tracking/src/test/isTrackingEnabled.js b/packages/tracking/src/test/isTrackingEnabled.ts similarity index 100% rename from packages/tracking/src/test/isTrackingEnabled.js rename to packages/tracking/src/test/isTrackingEnabled.ts diff --git a/packages/tracking/src/test/trackError.js b/packages/tracking/src/test/trackError.ts similarity index 85% rename from packages/tracking/src/test/trackError.js rename to packages/tracking/src/test/trackError.ts index e9e12efe48d5..30f9268884cd 100644 --- a/packages/tracking/src/test/trackError.js +++ b/packages/tracking/src/test/trackError.ts @@ -20,7 +20,7 @@ jest.mock('../shared'); * Internal dependencies */ import trackError from '../trackError'; -import { config, gtag } from '../shared'; +import { config, ControlParams, gtag } from '../shared'; describe('trackError', () => { afterEach(() => { @@ -35,14 +35,14 @@ describe('trackError', () => { config.trackingEnabled = true; const error = new Error('mock error'); - gtag.mockImplementationOnce((type, eventName, eventData) => { - eventData.event_callback(); + jest.mocked(gtag).mockImplementationOnce((_type, _eventName, eventData) => { + (eventData as ControlParams).event_callback?.(); }); await trackError('test_error', error.message, true); expect(gtag).toHaveBeenCalledWith('event', 'exception', { description: 'test_error: mock error', fatal: true, - event_callback: expect.any(Function), + event_callback: expect.any(Function) as () => void, }); }); diff --git a/packages/tracking/src/test/trackEvent.js b/packages/tracking/src/test/trackEvent.ts similarity index 74% rename from packages/tracking/src/test/trackEvent.js rename to packages/tracking/src/test/trackEvent.ts index 1ca19b7f44eb..aed7bf918ee9 100644 --- a/packages/tracking/src/test/trackEvent.js +++ b/packages/tracking/src/test/trackEvent.ts @@ -20,7 +20,7 @@ jest.mock('../shared'); * Internal dependencies */ import trackEvent from '../trackEvent'; -import { config, gtag } from '../shared'; +import { config, ControlParams, gtag } from '../shared'; describe('trackEvent', () => { afterEach(() => { @@ -34,23 +34,23 @@ describe('trackEvent', () => { config.trackingAllowed = true; config.trackingEnabled = true; - gtag.mockImplementationOnce((type, eventName, eventData) => { - eventData.event_callback(); + jest.mocked(gtag).mockImplementationOnce((_type, _eventName, eventData) => { + (eventData as ControlParams).event_callback?.(); }); - await trackEvent('name', { foo: 'abc', bar: 'def', baz: 'ghi' }); + await trackEvent('name', { name: 'abc', value: 'def', event_label: 'ghi' }); expect(gtag).toHaveBeenCalledWith('event', 'name', { event_callback: expect.any(Function), - foo: 'abc', - bar: 'def', - baz: 'ghi', + name: 'abc', + value: 'def', + event_label: 'ghi', }); }); it('does not push to dataLayer when tracking is disabled', async () => { config.trackingEnabled = false; - await trackEvent('name', { foo: 'abc', bar: 'def', baz: 'ghi' }); + await trackEvent('name', { name: 'abc', value: 'def', event_label: 'ghi' }); expect(gtag).not.toHaveBeenCalled(); }); @@ -60,68 +60,60 @@ describe('trackEvent', () => { config.trackingId = 'UA-12345678-1'; config.trackingIdGA4 = 'G-ABC1234567'; - gtag.mockImplementationOnce((type, eventName, eventData) => { - eventData.event_callback(); + jest.mocked(gtag).mockImplementationOnce((_type, _eventName, eventData) => { + (eventData as ControlParams).event_callback?.(); }); - await trackEvent('name', { search_type: 'abc', bar: 'def', baz: 'ghi' }); - await trackEvent('name', { duration: 123, bar: 'def', baz: 'ghi' }); - await trackEvent('name', { title_length: 123, bar: 'def', baz: 'ghi' }); - await trackEvent('name', { unread_count: 123, bar: 'def', baz: 'ghi' }); + await trackEvent('name', { + search_type: 'abc', + }); + await trackEvent('name', { + duration: 123, + }); + await trackEvent('name', { + title_length: 123, + }); + await trackEvent('name', { + unread_count: 123, + }); expect(gtag).toHaveBeenNthCalledWith(1, 'event', 'name', { event_callback: expect.any(Function), event_label: 'abc', - bar: 'def', - baz: 'ghi', send_to: config.trackingId, }); expect(gtag).toHaveBeenNthCalledWith(2, 'event', 'name', { event_callback: expect.any(Function), search_type: 'abc', - bar: 'def', - baz: 'ghi', send_to: config.trackingIdGA4, }); expect(gtag).toHaveBeenNthCalledWith(3, 'event', 'name', { event_callback: expect.any(Function), value: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingId, }); expect(gtag).toHaveBeenNthCalledWith(4, 'event', 'name', { event_callback: expect.any(Function), duration: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingIdGA4, }); expect(gtag).toHaveBeenNthCalledWith(5, 'event', 'name', { event_callback: expect.any(Function), value: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingId, }); expect(gtag).toHaveBeenNthCalledWith(6, 'event', 'name', { event_callback: expect.any(Function), title_length: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingIdGA4, }); expect(gtag).toHaveBeenNthCalledWith(7, 'event', 'name', { event_callback: expect.any(Function), value: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingId, }); expect(gtag).toHaveBeenNthCalledWith(8, 'event', 'name', { event_callback: expect.any(Function), unread_count: 123, - bar: 'def', - baz: 'ghi', send_to: config.trackingIdGA4, }); }); diff --git a/packages/tracking/src/test/trackScreenView.js b/packages/tracking/src/test/trackScreenView.ts similarity index 85% rename from packages/tracking/src/test/trackScreenView.js rename to packages/tracking/src/test/trackScreenView.ts index 6d950330b785..f214357a5fa9 100644 --- a/packages/tracking/src/test/trackScreenView.js +++ b/packages/tracking/src/test/trackScreenView.ts @@ -20,7 +20,7 @@ jest.mock('../shared'); * Internal dependencies */ import trackScreenView from '../trackScreenView'; -import { config, gtag } from '../shared'; +import { config, ControlParams, gtag } from '../shared'; describe('trackScreenView', () => { afterEach(() => { @@ -35,13 +35,13 @@ describe('trackScreenView', () => { config.trackingEnabled = true; config.trackingId = 'UA-12345678-1'; - gtag.mockImplementationOnce((type, eventName, eventData) => { - eventData.event_callback(); + jest.mocked(gtag).mockImplementationOnce((_type, _eventName, eventData) => { + (eventData as ControlParams).event_callback?.(); }); await trackScreenView('Explore Templates'); expect(gtag).toHaveBeenCalledWith('event', 'screen_view', { - event_callback: expect.any(Function), + event_callback: expect.any(Function) as () => void, screen_name: 'Explore Templates', }); }); diff --git a/packages/tracking/src/test/trackTiming.js b/packages/tracking/src/test/trackTiming.ts similarity index 91% rename from packages/tracking/src/test/trackTiming.js rename to packages/tracking/src/test/trackTiming.ts index 91c1729d9094..7da2ec30f328 100644 --- a/packages/tracking/src/test/trackTiming.js +++ b/packages/tracking/src/test/trackTiming.ts @@ -32,19 +32,19 @@ describe('trackTiming', () => { afterEach(() => { config.trackingAllowed = false; config.trackingEnabled = false; - config.appName = undefined; + config.appName = ''; jest.clearAllMocks(); }); - it('sends two separate tracking events', async () => { + it('sends two separate tracking events', () => { config.appName = 'Foo App'; config.trackingAllowed = true; config.trackingEnabled = true; config.trackingId = 'UA-12345678-1'; config.trackingIdGA4 = 'G-ABC1234567'; - await trackTiming('page', 50, 'carousel_navigate', 'click'); + trackTiming('page', 50, 'carousel_navigate', 'click'); expect(trackEvent).toHaveBeenCalledTimes(2); expect(trackEvent).toHaveBeenNthCalledWith(1, 'timing_complete', { diff --git a/packages/tracking/src/track.ts b/packages/tracking/src/track.ts index 43a921defc9a..a810a6f769f5 100644 --- a/packages/tracking/src/track.ts +++ b/packages/tracking/src/track.ts @@ -27,7 +27,7 @@ import { gtag } from './shared'; * @return Promise that always resolves. */ function track(eventName: string, eventData = {}): Promise { - return new Promise((resolve) => { + return new Promise((resolve) => { // This timeout ensures a tracking event does not block the user // event if it is not sent (in time). // If this fails, it shouldn't reject the promise since event diff --git a/packages/units/src/getBoundRect.ts b/packages/units/src/getBoundRect.ts index a82457efe614..db458288c987 100644 --- a/packages/units/src/getBoundRect.ts +++ b/packages/units/src/getBoundRect.ts @@ -73,13 +73,13 @@ function getBoundRect(list: ElementBox[]) { } export function calcRotatedObjectPositionAndSize( - angle: number, + angle = 0, x: number, y: number, width: number, height: number ) { - if (!angle || angle === 0) { + if (!angle) { return { x, y, width, height }; } diff --git a/packages/units/src/test/getBoundRect.js b/packages/units/src/test/getBoundRect.ts similarity index 95% rename from packages/units/src/test/getBoundRect.js rename to packages/units/src/test/getBoundRect.ts index 0de50402fd28..419662c79518 100644 --- a/packages/units/src/test/getBoundRect.js +++ b/packages/units/src/test/getBoundRect.ts @@ -27,12 +27,14 @@ describe('getBoundRect', () => { y: 10, width: 100, height: 50, + rotationAngle: 0, }, { x: 30, y: 20, width: 100, height: 50, + rotationAngle: 0, }, ]; @@ -55,18 +57,21 @@ describe('getBoundRect', () => { y: 10, width: 100, height: 50, + rotationAngle: 0, }, { x: 30, y: 20, width: 100, height: 50, + rotationAngle: 0, }, { x: 75, y: 84, width: 50, height: 32, + rotationAngle: 0, }, ]; @@ -133,6 +138,7 @@ describe('getBoundRect', () => { y: 83, width: 250, height: 12, + rotationAngle: 0, }, { x: 18, diff --git a/packages/units/src/test/range.js b/packages/units/src/test/range.ts similarity index 100% rename from packages/units/src/test/range.js rename to packages/units/src/test/range.ts diff --git a/packages/url/src/addQueryArgs.ts b/packages/url/src/addQueryArgs.ts index 1bd058354e1d..5b0f6ccf1328 100644 --- a/packages/url/src/addQueryArgs.ts +++ b/packages/url/src/addQueryArgs.ts @@ -27,7 +27,7 @@ */ export default function addQueryArgs( url: string, - args: Record + args: Record ): string { let isRelativeUrl = false; let parsedURL; diff --git a/packages/url/src/test/addQueryArgs.js b/packages/url/src/test/addQueryArgs.ts similarity index 100% rename from packages/url/src/test/addQueryArgs.js rename to packages/url/src/test/addQueryArgs.ts diff --git a/packages/url/src/test/url.js b/packages/url/src/test/url.ts similarity index 100% rename from packages/url/src/test/url.js rename to packages/url/src/test/url.ts diff --git a/packages/wp-dashboard/src/api/taxonomies.js b/packages/wp-dashboard/src/api/taxonomies.js index 7f05ab2a9d1f..377273644fba 100644 --- a/packages/wp-dashboard/src/api/taxonomies.js +++ b/packages/wp-dashboard/src/api/taxonomies.js @@ -56,7 +56,6 @@ export async function getTaxonomies(config, args = {}) { * @param {Object} args Additional args. * @return {Promise} Term promise. */ - export function getTaxonomyTerms(config, endpoint, args = {}) { return apiFetch({ url: addQueryArgs(endpoint, args), diff --git a/packages/wp-story-editor/src/api/utils/getResourceFromAttachment.js b/packages/wp-story-editor/src/api/utils/getResourceFromAttachment.js index b51fdee4ef03..f434e9c34e52 100644 --- a/packages/wp-story-editor/src/api/utils/getResourceFromAttachment.js +++ b/packages/wp-story-editor/src/api/utils/getResourceFromAttachment.js @@ -24,6 +24,11 @@ import { } from '@googleforcreators/media'; import { snakeToCamelCaseObjectKeys } from '@web-stories-wp/wp-utils'; +/** + * Internal dependencies + */ +import normalizeResourceSizes from './normalizeResourceSizes'; + /** * @typedef {import('@googleforcreators/media').Resource} Resource */ @@ -78,7 +83,7 @@ function getImageResourceFromAttachment(attachment) { height, id, alt, - sizes, + sizes: normalizeResourceSizes(sizes), local: false, isExternal: false, }); diff --git a/packages/media/src/normalizeResourceSizes.ts b/packages/wp-story-editor/src/api/utils/normalizeResourceSizes.js similarity index 52% rename from packages/media/src/normalizeResourceSizes.ts rename to packages/wp-story-editor/src/api/utils/normalizeResourceSizes.js index 287dafbb28fc..fb1277cdbf1f 100644 --- a/packages/media/src/normalizeResourceSizes.ts +++ b/packages/wp-story-editor/src/api/utils/normalizeResourceSizes.js @@ -15,27 +15,27 @@ */ /** - * External dependencies + * @typedef {import('@googleforcreators/types').ResourceSize} ResourceSize */ -import type { ResourceSize } from '@googleforcreators/types'; -interface ResourceSizeInput { - width: number | string; - height: number | string; - mimeType: string; - sourceUrl: string; -} +/** + * @typedef {Object} PartialResourceSize + * @property {string|number} [width] Resource width. + * @property {string|number} [height] Resource height. + * @property {string} mimeType Mime type. + * @property {string} [sourceUrl] URL. + */ /** * Normalize resource sizes to ensure numerical values for dimensions. * - * @param sizes Sizes. - * @return Normalized sizes. + * Skips invalid sizes lacking either width or height. + * + * @param {Object.} sizes Sizes. + * @return {Object.} Normalized sizes. */ -function normalizeResourceSizes(sizes?: { [key: string]: ResourceSizeInput }): { - [key: string]: ResourceSize; -} { - const normalizedSizes: { [key: string]: ResourceSize } = {}; +function normalizeResourceSizes(sizes) { + const normalizedSizes = {}; if (!sizes) { return normalizedSizes; @@ -43,10 +43,22 @@ function normalizeResourceSizes(sizes?: { [key: string]: ResourceSizeInput }): { for (const size of Object.keys(sizes)) { const data = sizes[size]; + + if (!data.width || !data.height || !data.sourceUrl) { + continue; + } + + const width = Number(data.width); + const height = Number(data.height); + + if (Number.isNaN(width) || Number.isNaN(height)) { + continue; + } + normalizedSizes[size] = { ...data, - width: Number(data.width), - height: Number(data.height), + width, + height, }; } diff --git a/packages/media/src/test/normalizeResourceSizes.js b/packages/wp-story-editor/src/api/utils/test/normalizeResourceSizes.js similarity index 55% rename from packages/media/src/test/normalizeResourceSizes.js rename to packages/wp-story-editor/src/api/utils/test/normalizeResourceSizes.js index 8b767a158c93..18346d7939e9 100644 --- a/packages/media/src/test/normalizeResourceSizes.js +++ b/packages/wp-story-editor/src/api/utils/test/normalizeResourceSizes.js @@ -23,16 +23,19 @@ describe('normalizeResourceSizes', () => { it('normalizes resource sizes to numeric width and height', () => { const sizes = { size1: { + mimeType: 'image/jpeg', width: '300', height: '300', sourceUrl: 'image-300x300.jpg', }, size2: { + mimeType: 'image/jpeg', width: '600', height: '600', sourceUrl: 'image-600x600.jpg', }, size3: { + mimeType: 'image/jpeg', width: '900', height: '900', sourceUrl: 'image-900x900.jpg', @@ -40,16 +43,19 @@ describe('normalizeResourceSizes', () => { }; const expected = { size1: { + mimeType: 'image/jpeg', width: 300, height: 300, sourceUrl: 'image-300x300.jpg', }, size2: { + mimeType: 'image/jpeg', width: 600, height: 600, sourceUrl: 'image-600x600.jpg', }, size3: { + mimeType: 'image/jpeg', width: 900, height: 900, sourceUrl: 'image-900x900.jpg', @@ -58,4 +64,51 @@ describe('normalizeResourceSizes', () => { expect(normalizeResourceSizes(sizes)).toStrictEqual(expected); }); + + it('should skip sizes that are invalid', () => { + const sizes = { + img1: { mimeType: 'image/jpeg', height: 100, sourceUrl: 'small-url' }, + img2: { + mimeType: 'image/jpeg', + width: 300, + height: 150, + sourceUrl: '', + }, + img3: { + mimeType: 'image/jpeg', + width: 400, + height: 200, + sourceUrl: 'medium-url', + }, + img4: { + mimeType: 'image/jpeg', + width: 800, + height: 400, + sourceUrl: 'large-url', + }, + img5: { + mimeType: 'image/jpeg', + width: 300, + height: 150, + }, + img6: { mimeType: 'image/jpeg', width: 100, sourceUrl: 'small-url' }, + }; + + const expected = { + img3: { + mimeType: 'image/jpeg', + width: 400, + height: 200, + sourceUrl: 'medium-url', + }, + img4: { + mimeType: 'image/jpeg', + width: 800, + height: 400, + sourceUrl: 'large-url', + }, + }; + + expect(normalizeResourceSizes(sizes)).toStrictEqual(expected); + }); }); diff --git a/packages/wp-utils/src/test/snakeToCamelCase.js b/packages/wp-utils/src/test/snakeToCamelCase.ts similarity index 68% rename from packages/wp-utils/src/test/snakeToCamelCase.js rename to packages/wp-utils/src/test/snakeToCamelCase.ts index c336b6d8049c..33dc9dd7ece9 100644 --- a/packages/wp-utils/src/test/snakeToCamelCase.js +++ b/packages/wp-utils/src/test/snakeToCamelCase.ts @@ -22,31 +22,32 @@ import { } from '../snakeToCamelCase'; describe('snakeToCamelCase', () => { - it.each` - key | result - ${''} | ${''} - ${undefined} | ${''} - ${'test'} | ${'test'} - ${'rest_base'} | ${'restBase'} - ${'rest-base'} | ${'restBase'} - ${'rest-base_test'} | ${'restBaseTest'} - ${'_links'} | ${'_links'} - ${'links_'} | ${'links_'} - ${'a_l'} | ${'aL'} - `('should return the expected string for $key', ({ key, result }) => { + it.each([ + ['', ''], + [undefined, ''], + ['test', 'test'], + ['rest_base', 'restBase'], + ['rest-base', 'restBase'], + ['rest-base_test', 'restBaseTest'], + ['_links', '_links'], + ['links_', 'links_'], + ['a_l', 'aL'], + ])('should return the expected string for $key', (key, result) => { expect(snakeToCamelCase(key)).toStrictEqual(result); }); }); describe('snakeToCamelCaseObjectKeys', () => { - it.each` - key | result - ${{}} | ${{}} - ${[1, 2]} | ${[1, 2]} - ${undefined} | ${undefined} - ${''} | ${''} - ${{ item_one: 'two' }} | ${{ itemOne: 'two' }} - `('should return the expected value for $key', ({ key, result }) => { + it.each([ + [{}, {}], + [ + [1, 2], + [1, 2], + ], + [undefined, undefined], + ['', ''], + [{ item_one: 'two' }, { itemOne: 'two' }], + ])('should return the expected value for $key', (key, result) => { expect(snakeToCamelCaseObjectKeys(key)).toStrictEqual(result); }); diff --git a/patches/@types+draft-js+0.11.9.patch b/patches/@types+draft-js+0.11.9.patch new file mode 100644 index 000000000000..6d03af68b2a4 --- /dev/null +++ b/patches/@types+draft-js+0.11.9.patch @@ -0,0 +1,27 @@ +diff --git a/node_modules/@types/draft-js/index.d.ts b/node_modules/@types/draft-js/index.d.ts +index ac2e584..3aa03ed 100755 +--- a/node_modules/@types/draft-js/index.d.ts ++++ b/node_modules/@types/draft-js/index.d.ts +@@ -419,7 +419,21 @@ declare namespace Draft { + /** + * Valid inline styles. + */ +- type DraftInlineStyleType = 'BOLD' | 'CODE' | 'ITALIC' | 'STRIKETHROUGH' | 'UNDERLINE'; ++ type DraftInlineStyleType = ++ | 'BOLD' ++ | 'CODE' ++ | 'ITALIC' ++ | 'STRIKETHROUGH' ++ | 'UNDERLINE' ++ | 'NONE' ++ | 'CUSTOM-ITALIC' ++ | 'CUSTOM-UNDERLINE' ++ | 'CUSTOM-WEIGHT' ++ | 'CUSTOM-WEIGHT-700' ++ | 'CUSTOM-WEIGHT-900' ++ | 'CUSTOM-COLOR' ++ | 'CUSTOM-LETTERSPACING' ++ | 'CUSTOM-UPPERCASE'; + + /** + * Default entity types. diff --git a/tests/js/jest.config.js b/tests/js/jest.config.js index be23b6d8b9f4..6d33e3a3f166 100644 --- a/tests/js/jest.config.js +++ b/tests/js/jest.config.js @@ -22,6 +22,7 @@ import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); +/** @type {import('@jest/types').Config} */ export default { rootDir: '../../', resolver: '@web-stories-wp/jest-resolver', @@ -43,11 +44,7 @@ export default { // See https://jestjs.io/docs/configuration#transformignorepatterns-arraystring transformIgnorePatterns: ['/node_modules/(?!(use-reduction)/)'], testEnvironment: 'jsdom', - testMatch: [ - '**/__tests__/**/*.[jt]s', - '**/test/**/*.[jt]s', - '**/?(*.)test.[jt]s', - ], + testMatch: ['**/test/**/*.[jt]s'], globals: { WEB_STORIES_ENV: 'development', WEB_STORIES_DISABLE_ERROR_BOUNDARIES: true, diff --git a/tsconfig.json b/tsconfig.json index fb65fdb35efc..eb276f9bd8c3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,5 +23,5 @@ { "path": "packages/url" }, { "path": "packages/wp-utils" } ], - "include": [] + "files": [] } diff --git a/tsconfig.shared.json b/tsconfig.shared.json index 0a370eca6e77..f0ccb28985c4 100644 --- a/tsconfig.shared.json +++ b/tsconfig.shared.json @@ -28,7 +28,7 @@ "pretty": true, "sourceMap": true, "typeRoots": ["./typings", "./node_modules/@types"], - "types": [] + "types": ["jest", "jest-extended", "node"] }, "exclude": [ "packages/*/dist-*/**", @@ -36,7 +36,7 @@ "packages/*/node_modules/**", "**/karma/**", "**/stories/**", - "**/test/**", - "**/testUtils/**" + "**/test/**/*.js", + "**/testUtils/**/*.js" ] }