From e213e7d8fd5f0a1745bf214bf59ee70b268f28c9 Mon Sep 17 00:00:00 2001 From: Laurynas Date: Tue, 21 May 2024 14:09:04 +0300 Subject: [PATCH 01/37] Remplaced JS in module with JS from CDN --- _dev/js/front/.babelrc | 4 - _dev/js/front/.browserslistrc | 4 - _dev/js/front/.eslintrc.js | 20 - _dev/js/front/.gitignore | 29 - _dev/js/front/.prettierrc.js | 6 - _dev/js/front/jest.config.json | 21 - _dev/js/front/package-lock.json | 12924 ---------------- _dev/js/front/package.json | 45 - _dev/js/front/src/api/ps-checkout.api.js | 267 - .../1_6/express-button-cart.component.js | 71 - .../1_6/express-button-checkout.component.js | 78 - .../1_6/express-button-product.component.js | 56 - .../components/1_6/notification.component.js | 69 - .../1_6/pay-later-button-cart.component.js | 75 - .../pay-later-button-checkout.component.js | 87 - .../1_6/pay-later-button-product.component.js | 60 - .../1_6/payment-options.component.js | 135 - .../1_7/conditions-checkbox.component.js | 48 - .../1_7/express-button-cart.component.js | 56 - .../1_7/express-button-checkout.component.js | 69 - .../1_7/express-button-product.component.js | 76 - .../components/1_7/notification.component.js | 62 - .../1_7/pay-later-button-cart.component.js | 60 - .../pay-later-button-checkout.component.js | 73 - .../1_7/pay-later-button-product.component.js | 80 - .../1_7/payment-options.component.js | 107 - .../common/card-fields.component.js | 380 - .../express-checkout-button.component.js | 182 - .../src/components/common/loader.component.js | 78 - .../common/loader.component.spec.js | 111 - .../src/components/common/marker.component.js | 90 - .../common/marker.component.spec.js | 90 - .../src/components/common/modal.component.js | 138 - .../common/payment-fields.component.js | 57 - .../common/payment-fields.component.spec.js | 71 - .../common/payment-method-logos.component.js | 146 - .../common/payment-option.component.js | 270 - .../common/payment-option.component.spec.js | 129 - .../payment-options-loader.component.js | 33 - .../payment-options-loader.component.spec.js | 81 - .../common/payment-token.component.js | 423 - .../common/smart-button.component.js | 225 - .../common/smart-button.component.spec.js | 72 - .../ps-checkout-express.component/index.js | 45 - .../ps-checkout-express-ps1_6.component.js | 105 - .../ps-checkout-express-ps1_7.component.js | 105 - .../index.js | 100 - .../pay-later-banner-ps1_6.component.js | 30 - .../pay-later-banner-ps1_7.component.js | 30 - .../index.js | 99 - .../pay-later-message-ps1_6.component.js | 30 - .../pay-later-message-ps1_7.component.js | 30 - .../ps-checkout-pay-later.component/index.js | 45 - ...eckout-pay-later-button-ps1_6.component.js | 106 - ...eckout-pay-later-button-ps1_7.component.js | 105 - .../components/ps-checkout.component/index.js | 43 - .../ps-checkout-ps1_6.component.js | 67 - .../ps-checkout-ps1_7.component.js | 50 - _dev/js/front/src/config/paypal-sdk.config.js | 37 - .../js/front/src/config/ps-checkout.config.js | 93 - .../html-selectors-ps1_6.constants.js | 38 - .../html-selectors-ps1_7.constants.js | 52 - .../src/constants/ps-version.constants.js | 20 - _dev/js/front/src/core/app.js | 240 - _dev/js/front/src/core/bootstrap.js | 28 - .../core/dependency-injection/base.class.js | 26 - .../dependency-injection/base.class.spec.js | 51 - .../dependency-injection/base.component.js | 41 - .../base.component.spec.js | 54 - _dev/js/front/src/index.js | 41 - .../html-element-ps1_6.service.js | 103 - .../html-element-ps1_7.service.js | 196 - .../src/service/html-element.service/index.js | 141 - _dev/js/front/src/service/paypal.service.js | 326 - .../src/service/prestashop.service.spec.js | 214 - .../src/service/prestashop.service/index.js | 122 - .../prestashop-ps1_6.service.js | 151 - .../prestashop-ps1_7.service.js | 148 - .../service/query-selector.service.spec.js | 57 - .../default-selectors-ps1_6.js | 62 - .../default-selectors-ps1_7-hummingbird.js | 63 - .../default-selectors-ps1_7.js | 63 - .../service/query-selector.service/index.js | 146 - .../query-selector-ps1_6.service.js | 186 - .../query-selector-ps1_7.service.js | 202 - .../front/src/service/translation.service.js | 34 - .../src/service/translation.service.spec.js | 51 - .../src/utils/dependency-injection/inject.js | 45 - .../utils/dependency-injection/inject.spec.js | 74 - .../extra/types/app-aware.typedef.doc.js | 28 - .../types/container-aware.typedef.doc.js | 32 - .../types/paypal-sdk-config.typedef.doc.js | 35 - .../extra/types/paypal-sdk.typedef.doc.js | 66 - _dev/js/front/src/utils/globals/index.js | 29 - .../front/src/utils/polyfills/event-target.js | 21 - _dev/js/front/src/utils/polyfills/index.js | 30 - .../polyfills/web-api.child-node.remove.js | 39 - .../web-api.child-node.replace-with.js | 54 - .../polyfills/web-api.parent-node.append.js | 49 - .../polyfills/web-api.parent-node.prepend.js | 49 - .../front/test/mocks/api/ps-checkout.api.js | 1 - .../common/hosted-fields.component.mock.js | 25 - .../components/common/mark.component.mock.js | 25 - .../common/payment-fields.component.mock.js | 25 - .../common/smart-button.component.mock.js | 25 - .../test/mocks/data/product-dataset.json | 262 - _dev/js/front/test/mocks/di-container.mock.js | 25 - .../html-templates/prestashop-site-1_7.js | 47 - .../test/mocks/service/paypal.service.js | 22 - _dev/js/front/test/setup.js | 4 - _dev/js/front/webpack/profile/build.js | 73 - _dev/js/front/webpack/profile/watch.js | 25 - _dev/js/front/webpack/utils/paths.js | 16 - _dev/js/front/webpack/webpack.config.js | 44 - {_dev/js => docs}/front/README.md | 0 .../front}/front-end-initialization.jpg | Bin .../docs => docs/front}/html-generation.jpg | Bin ps_checkout.php | 13 +- 118 files changed, 8 insertions(+), 22309 deletions(-) delete mode 100644 _dev/js/front/.babelrc delete mode 100644 _dev/js/front/.browserslistrc delete mode 100644 _dev/js/front/.eslintrc.js delete mode 100644 _dev/js/front/.gitignore delete mode 100644 _dev/js/front/.prettierrc.js delete mode 100644 _dev/js/front/jest.config.json delete mode 100644 _dev/js/front/package-lock.json delete mode 100644 _dev/js/front/package.json delete mode 100644 _dev/js/front/src/api/ps-checkout.api.js delete mode 100644 _dev/js/front/src/components/1_6/express-button-cart.component.js delete mode 100644 _dev/js/front/src/components/1_6/express-button-checkout.component.js delete mode 100644 _dev/js/front/src/components/1_6/express-button-product.component.js delete mode 100644 _dev/js/front/src/components/1_6/notification.component.js delete mode 100644 _dev/js/front/src/components/1_6/pay-later-button-cart.component.js delete mode 100644 _dev/js/front/src/components/1_6/pay-later-button-checkout.component.js delete mode 100644 _dev/js/front/src/components/1_6/pay-later-button-product.component.js delete mode 100644 _dev/js/front/src/components/1_6/payment-options.component.js delete mode 100644 _dev/js/front/src/components/1_7/conditions-checkbox.component.js delete mode 100644 _dev/js/front/src/components/1_7/express-button-cart.component.js delete mode 100644 _dev/js/front/src/components/1_7/express-button-checkout.component.js delete mode 100644 _dev/js/front/src/components/1_7/express-button-product.component.js delete mode 100644 _dev/js/front/src/components/1_7/notification.component.js delete mode 100644 _dev/js/front/src/components/1_7/pay-later-button-cart.component.js delete mode 100644 _dev/js/front/src/components/1_7/pay-later-button-checkout.component.js delete mode 100644 _dev/js/front/src/components/1_7/pay-later-button-product.component.js delete mode 100644 _dev/js/front/src/components/1_7/payment-options.component.js delete mode 100644 _dev/js/front/src/components/common/card-fields.component.js delete mode 100644 _dev/js/front/src/components/common/express-checkout-button.component.js delete mode 100644 _dev/js/front/src/components/common/loader.component.js delete mode 100644 _dev/js/front/src/components/common/loader.component.spec.js delete mode 100644 _dev/js/front/src/components/common/marker.component.js delete mode 100644 _dev/js/front/src/components/common/marker.component.spec.js delete mode 100644 _dev/js/front/src/components/common/modal.component.js delete mode 100644 _dev/js/front/src/components/common/payment-fields.component.js delete mode 100644 _dev/js/front/src/components/common/payment-fields.component.spec.js delete mode 100644 _dev/js/front/src/components/common/payment-method-logos.component.js delete mode 100644 _dev/js/front/src/components/common/payment-option.component.js delete mode 100644 _dev/js/front/src/components/common/payment-option.component.spec.js delete mode 100644 _dev/js/front/src/components/common/payment-options-loader.component.js delete mode 100644 _dev/js/front/src/components/common/payment-options-loader.component.spec.js delete mode 100644 _dev/js/front/src/components/common/payment-token.component.js delete mode 100644 _dev/js/front/src/components/common/smart-button.component.js delete mode 100644 _dev/js/front/src/components/common/smart-button.component.spec.js delete mode 100644 _dev/js/front/src/components/ps-checkout-express.component/index.js delete mode 100644 _dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_6.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_7.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-banner.component/index.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_6.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_7.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-message.component/index.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_6.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_7.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later.component/index.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_6.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_7.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout.component/index.js delete mode 100644 _dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_6.component.js delete mode 100644 _dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_7.component.js delete mode 100644 _dev/js/front/src/config/paypal-sdk.config.js delete mode 100644 _dev/js/front/src/config/ps-checkout.config.js delete mode 100644 _dev/js/front/src/constants/html-selectors-ps1_6.constants.js delete mode 100644 _dev/js/front/src/constants/html-selectors-ps1_7.constants.js delete mode 100644 _dev/js/front/src/constants/ps-version.constants.js delete mode 100644 _dev/js/front/src/core/app.js delete mode 100644 _dev/js/front/src/core/bootstrap.js delete mode 100644 _dev/js/front/src/core/dependency-injection/base.class.js delete mode 100644 _dev/js/front/src/core/dependency-injection/base.class.spec.js delete mode 100644 _dev/js/front/src/core/dependency-injection/base.component.js delete mode 100644 _dev/js/front/src/core/dependency-injection/base.component.spec.js delete mode 100644 _dev/js/front/src/index.js delete mode 100644 _dev/js/front/src/service/html-element.service/html-element-ps1_6.service.js delete mode 100644 _dev/js/front/src/service/html-element.service/html-element-ps1_7.service.js delete mode 100644 _dev/js/front/src/service/html-element.service/index.js delete mode 100644 _dev/js/front/src/service/paypal.service.js delete mode 100644 _dev/js/front/src/service/prestashop.service.spec.js delete mode 100644 _dev/js/front/src/service/prestashop.service/index.js delete mode 100644 _dev/js/front/src/service/prestashop.service/prestashop-ps1_6.service.js delete mode 100644 _dev/js/front/src/service/prestashop.service/prestashop-ps1_7.service.js delete mode 100644 _dev/js/front/src/service/query-selector.service.spec.js delete mode 100644 _dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_6.js delete mode 100644 _dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7-hummingbird.js delete mode 100644 _dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7.js delete mode 100644 _dev/js/front/src/service/query-selector.service/index.js delete mode 100644 _dev/js/front/src/service/query-selector.service/query-selector-ps1_6.service.js delete mode 100644 _dev/js/front/src/service/query-selector.service/query-selector-ps1_7.service.js delete mode 100644 _dev/js/front/src/service/translation.service.js delete mode 100644 _dev/js/front/src/service/translation.service.spec.js delete mode 100644 _dev/js/front/src/utils/dependency-injection/inject.js delete mode 100644 _dev/js/front/src/utils/dependency-injection/inject.spec.js delete mode 100644 _dev/js/front/src/utils/extra/types/app-aware.typedef.doc.js delete mode 100644 _dev/js/front/src/utils/extra/types/container-aware.typedef.doc.js delete mode 100644 _dev/js/front/src/utils/extra/types/paypal-sdk-config.typedef.doc.js delete mode 100644 _dev/js/front/src/utils/extra/types/paypal-sdk.typedef.doc.js delete mode 100644 _dev/js/front/src/utils/globals/index.js delete mode 100644 _dev/js/front/src/utils/polyfills/event-target.js delete mode 100644 _dev/js/front/src/utils/polyfills/index.js delete mode 100644 _dev/js/front/src/utils/polyfills/web-api.child-node.remove.js delete mode 100644 _dev/js/front/src/utils/polyfills/web-api.child-node.replace-with.js delete mode 100644 _dev/js/front/src/utils/polyfills/web-api.parent-node.append.js delete mode 100644 _dev/js/front/src/utils/polyfills/web-api.parent-node.prepend.js delete mode 100644 _dev/js/front/test/mocks/api/ps-checkout.api.js delete mode 100644 _dev/js/front/test/mocks/components/common/hosted-fields.component.mock.js delete mode 100644 _dev/js/front/test/mocks/components/common/mark.component.mock.js delete mode 100644 _dev/js/front/test/mocks/components/common/payment-fields.component.mock.js delete mode 100644 _dev/js/front/test/mocks/components/common/smart-button.component.mock.js delete mode 100644 _dev/js/front/test/mocks/data/product-dataset.json delete mode 100644 _dev/js/front/test/mocks/di-container.mock.js delete mode 100644 _dev/js/front/test/mocks/html-templates/prestashop-site-1_7.js delete mode 100644 _dev/js/front/test/mocks/service/paypal.service.js delete mode 100644 _dev/js/front/test/setup.js delete mode 100644 _dev/js/front/webpack/profile/build.js delete mode 100644 _dev/js/front/webpack/profile/watch.js delete mode 100644 _dev/js/front/webpack/utils/paths.js delete mode 100644 _dev/js/front/webpack/webpack.config.js rename {_dev/js => docs}/front/README.md (100%) rename {_dev/js/front/docs => docs/front}/front-end-initialization.jpg (100%) rename {_dev/js/front/docs => docs/front}/html-generation.jpg (100%) diff --git a/_dev/js/front/.babelrc b/_dev/js/front/.babelrc deleted file mode 100644 index 644dde977..000000000 --- a/_dev/js/front/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/preset-env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/_dev/js/front/.browserslistrc b/_dev/js/front/.browserslistrc deleted file mode 100644 index 3e240b5f4..000000000 --- a/_dev/js/front/.browserslistrc +++ /dev/null @@ -1,4 +0,0 @@ -> 1% -last 2 versions -not dead -IE 11 diff --git a/_dev/js/front/.eslintrc.js b/_dev/js/front/.eslintrc.js deleted file mode 100644 index ce2ec90fa..000000000 --- a/_dev/js/front/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es6: true, - jest: true, - node: true - }, - extends: ['eslint:recommended'], - parser: 'babel-eslint', - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module' - }, - plugins: ['babel'], - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' - } -}; diff --git a/_dev/js/front/.gitignore b/_dev/js/front/.gitignore deleted file mode 100644 index 121cfd2e8..000000000 --- a/_dev/js/front/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -.DS_Store -node_modules -/dist - -/tests/e2e/videos/ -/tests/e2e/screenshots/ - -# Coverage metadata -/coverage/ - -# local env files -.env -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/_dev/js/front/.prettierrc.js b/_dev/js/front/.prettierrc.js deleted file mode 100644 index dd1819414..000000000 --- a/_dev/js/front/.prettierrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - htmlWhitespaceSensitivity: 'ignore', - semi: true, - singleQuote: true, - trailingComma: 'none' -}; diff --git a/_dev/js/front/jest.config.json b/_dev/js/front/jest.config.json deleted file mode 100644 index 535f5fefe..000000000 --- a/_dev/js/front/jest.config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "clearMocks": true, - "collectCoverageFrom": [ - "src/*.js", - "src/**/*.js", - "!src/utils/extra/**", - "!src/utils/extra/**/*", - "!src/utils/polyfills/**", - "!src/utils/polyfills/**/*" - ], - "setupFiles": [ - "./test/setup.js" - ], - "testMatch": [ - "**/src/*.spec.js", - "**/src/**/*.spec.js" - ], - "transform": { - "\\.[jt]sx?$": "babel-jest" - } -} diff --git a/_dev/js/front/package-lock.json b/_dev/js/front/package-lock.json deleted file mode 100644 index 7c805387d..000000000 --- a/_dev/js/front/package-lock.json +++ /dev/null @@ -1,12924 +0,0 @@ -{ - "name": "ps_checkout-frontoffice", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ps_checkout-frontoffice", - "license": "AFL-3.0", - "dependencies": { - "@paypal/paypal-js": "^8.0.0", - "@ungap/event-target": "^0.2.2", - "classlist-polyfill": "^1.2.0", - "promise-polyfill": "8.1.3", - "url-polyfill": "^1.1.9", - "whatwg-fetch": "^3.0.0" - }, - "devDependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.3", - "babel-loader": "^8.1.0", - "bottlejs": "^2.0.0", - "core-js": "^3.7.0", - "eslint": "^7.12.1", - "eslint-plugin-babel": "^5.3.1", - "eslint-plugin-prettier": "^3.1.4", - "jest": "^26.6.3", - "prettier": "^2.1.2", - "regenerator-runtime": "^0.13.7", - "terser-webpack-plugin": "^4.2.3", - "webpack": "^4.44.2", - "webpack-cli": "^4.1.0", - "webpack-merge": "^5.3.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/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/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/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/console/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/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/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/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/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/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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/transform/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/transform/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/transform/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/transform/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@jest/transform/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/transform/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/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/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@paypal/paypal-js": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@paypal/paypal-js/-/paypal-js-8.0.2.tgz", - "integrity": "sha512-JbWXxMsTDUE4j+JXAu04qBacjkP6/38lgGC5YKW/FBfU1v3S5EgjfF1cMCGFehcpmsU5T88rkpKDsuftrCkyCA==", - "dependencies": { - "promise-polyfill": "^8.3.0" - } - }, - "node_modules/@paypal/paypal-js/node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", - "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@ungap/event-target": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ungap/event-target/-/event-target-0.2.4.tgz", - "integrity": "sha512-u9Fd3k2qfMtn+0dxbCn/y0pzQ9Ucw6lWR984CrHcbxc+WzcMkJE4VjWHWSb9At40MjwMyHCkJNXroS55Osshhw==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "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", - "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/babel-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==", - "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/babel-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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/bottlejs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bottlejs/-/bottlejs-2.0.1.tgz", - "integrity": "sha512-50T0bzqeAqZ+//kgjdDxNu7UP8Je04isNPyHPwwOOPoeZmtVESkuF9nwkWEqSEd9Sw1yJ1oaoHBAMxe/wG4Zzg==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001587", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", - "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/classlist-polyfill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz", - "integrity": "sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", - "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", - "dev": true, - "dependencies": { - "browserslist": "^4.22.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", - "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=4.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/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/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/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/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "deprecated": "This module is no longer supported.", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true, - "optional": true - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-cli/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-cli/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-cli/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-cli/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-cli/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-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "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", - "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-config/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-config/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-config/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-config/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-config/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-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.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-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": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-each/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-each/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-each/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-each/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-each/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-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/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-jasmine2/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-jasmine2/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-jasmine2/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-jasmine2/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-jasmine2/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-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/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-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-resolve/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-resolve/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-resolve/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-resolve/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-resolve/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-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-runner/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-runner/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-runner/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-runner/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-runner/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-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-runtime/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-runtime/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-runtime/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-runtime/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-runtime/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-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-snapshot/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-snapshot/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-snapshot/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-snapshot/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-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/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-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/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-validate/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-validate/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-validate/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-validate/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-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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", - "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-watcher/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-watcher/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-watcher/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-watcher/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-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "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" - }, - "engines": { - "node": ">=8" - }, - "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/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-polyfill": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", - "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/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/slice-ansi/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/slice-ansi/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/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/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/supports-hyperlinks/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/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, - "dependencies": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-polyfill": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz", - "integrity": "sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==" - }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "4.47.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", - "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/webpack/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/webpack/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "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/wrap-ansi/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/wrap-ansi/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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/_dev/js/front/package.json b/_dev/js/front/package.json deleted file mode 100644 index bcdb828e6..000000000 --- a/_dev/js/front/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "author": "PrestaShop", - "name": "ps_checkout-frontoffice", - "homepage": "https://github.com/PrestaShopCorp/ps_checkout", - "repository": { - "type": "git", - "url": "git+https://github.com/PrestaShopCorp/ps_checkout.git" - }, - "scripts": { - "build": "webpack --config ./webpack/profile/build.js", - "test": "jest", - "coverage": "jest --collectCoverage", - "watch": "webpack --config ./webpack/profile/watch.js --watch" - }, - "devDependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.3", - "babel-loader": "^8.1.0", - "bottlejs": "^2.0.0", - "core-js": "^3.7.0", - "eslint": "^7.12.1", - "eslint-plugin-babel": "^5.3.1", - "eslint-plugin-prettier": "^3.1.4", - "jest": "^26.6.3", - "prettier": "^2.1.2", - "regenerator-runtime": "^0.13.7", - "terser-webpack-plugin": "^4.2.3", - "webpack": "^4.44.2", - "webpack-cli": "^4.1.0", - "webpack-merge": "^5.3.0" - }, - "dependencies": { - "@paypal/paypal-js": "^8.0.0", - "@ungap/event-target": "^0.2.2", - "classlist-polyfill": "^1.2.0", - "promise-polyfill": "8.1.3", - "url-polyfill": "^1.1.9", - "whatwg-fetch": "^3.0.0" - }, - "license": "AFL-3.0", - "private": true -} diff --git a/_dev/js/front/src/api/ps-checkout.api.js b/_dev/js/front/src/api/ps-checkout.api.js deleted file mode 100644 index f7a0f0f7e..000000000 --- a/_dev/js/front/src/api/ps-checkout.api.js +++ /dev/null @@ -1,267 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseClass } from '../core/dependency-injection/base.class'; - -export class PsCheckoutApi extends BaseClass { - static Inject = { - config: 'PsCheckoutConfig', - $: '$' - }; - - postCancelOrder(data) { - return fetch(this.config.cancelUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - body: JSON.stringify(data) - }).then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (false === response.ok) { - if (isJsonResponse) { - return response.json().then((response) => { - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - throw new Error(this.$('checkout.form.error.label')); - } - }); - } - - postCheckCartOrder(data, actions) { - return this.config.orderId - ? fetch(this.config.checkCartUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - body: JSON.stringify(data) - }) - .then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (isJsonResponse) { - if (false === response.ok) { - return response.json().then((response) => { - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - return response.json(); - } - - throw new Error(this.$('checkout.form.error.label')); - }) - .then((data) => { - if (!data) { - return actions.reject(); - } else { - return actions.resolve(); - } - }) - : Promise.resolve().then(() => actions.resolve()); - } - - /** - * @param {*} [data] - * @returns {Promise} - */ - postCreateOrder(data) { - return fetch(this.config.createUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - ...(data ? { body: JSON.stringify(data) } : {}) - }) - .then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (isJsonResponse) { - if (false === response.ok || response.status >= 400) { - return response.json().then((response) => { - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - return response.json(); - } - - throw new Error(this.$('checkout.form.error.label')); - }) - .then(({ body: { orderID } }) => orderID); - } - - postValidateOrder(data, actions) { - return fetch(this.config.validateOrderUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - body: JSON.stringify(data) - }) - .then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (isJsonResponse) { - if (false === response.ok || response.status >= 400) { - return response.json().then((response) => { - if ( - actions?.restart && - response.body && - 85 === response.body.error.code - ) { - return actions.restart(); - } - - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - return response.json(); - } - - throw new Error(this.$('checkout.form.error.label')); - }) - .then((response) => { - if (response.body && response.body.id_order) { - const { - id_cart, - id_module, - id_order, - secure_key, - paypal_order, - paypal_transaction - } = response.body; - - const confirmationUrl = new URL(this.config.confirmationUrl); - confirmationUrl.searchParams.append('id_cart', id_cart); - confirmationUrl.searchParams.append('id_module', id_module); - confirmationUrl.searchParams.append('id_order', id_order); - confirmationUrl.searchParams.append('key', secure_key); - confirmationUrl.searchParams.append('paypal_order', paypal_order); - confirmationUrl.searchParams.append( - 'paypal_transaction', - paypal_transaction - ); - - window.location.href = confirmationUrl.toString(); - } - }); - } - - postExpressCheckoutOrder(data, actions) { - return actions.order.get().then(({ payer, purchase_units }) => - fetch(this.config.expressCheckoutUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - body: JSON.stringify({ - ...data, - order: { - payer: payer, - shipping: purchase_units[0].shipping - } - }) - }).then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (isJsonResponse) { - if (false === response.ok || response.status >= 400) { - return response.json().then((response) => { - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - window.location.href = new URL( - this.config.checkoutCheckoutUrl - ).toString(); - - return; - } - - throw new Error(this.$('checkout.form.error.label')); - }) - ); - } - - postDeleteVaultedToken(data) { - return fetch(this.config.vaultUrl, { - method: 'post', - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - ...(data ? { body: JSON.stringify({action: 'deleteToken', ...data}) } : {}) - }) - .then((response) => { - const contentType = response.headers.get('content-type'); - const isJsonResponse = - contentType && contentType.indexOf('application/json') !== -1; - - if (isJsonResponse) { - if (false === response.ok || response.status >= 400) { - return response.json().then((response) => { - throw response.body && response.body.error - ? response.body.error - : { message: this.$('checkout.form.error.label') }; - }); - } - - return response.json(); - } - - throw new Error(this.$('checkout.form.error.label')); - }); - } -} diff --git a/_dev/js/front/src/components/1_6/express-button-cart.component.js b/_dev/js/front/src/components/1_6/express-button-cart.component.js deleted file mode 100644 index f555e8459..000000000 --- a/_dev/js/front/src/components/1_6/express-button-cart.component.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class ExpressButtonCartComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCart(); - } - - renderComponent() { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps_checkout-express-button-cart'; - this.checkoutExpressButton.classList.add( - 'ps_checkout-express-button', - 'ps_checkout-express-button-cart' - ); - - const separatorText = document.createElement('div'); - separatorText.classList.add('ps_checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: '#ps_checkout-express-button-cart' - } - ).render(); - } - - render() { - if (!this.buttonReferenceContainer) return; - - this.renderComponent(); - this.prestashopService.onUpdatedShoppingCartExtra(() => { - if (null === document.querySelector('#ps_checkout-express-button-cart')) { - this.renderComponent(); - } - }); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/express-button-checkout.component.js b/_dev/js/front/src/components/1_6/express-button-checkout.component.js deleted file mode 100644 index 6296b816b..000000000 --- a/_dev/js/front/src/components/1_6/express-button-checkout.component.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class ExpressButtonCheckoutComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCheckout(); - } - - renderTitle() { - this.checkoutExpressTitle = document.createElement('h3'); - this.checkoutExpressTitle.classList.add('page-heading', 'bottom-indent'); - this.checkoutExpressTitle.innerText = this.$( - 'express-button.checkout.express-checkout' - ); - - this.buttonReferenceContainer.prepend(this.checkoutExpressTitle); - } - - render() { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps_checkout-express-button-checkout'; - this.checkoutExpressButton.classList.add( - 'ps_checkout-express-button', - 'ps_checkout-express-button-checkout' - ); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: '#ps_checkout-express-button-checkout' - } - ).render(); - - if (this.prestashopService.isNativeOnePageCheckoutPage()) { - const separatorText = document.createElement('div'); - separatorText.classList.add('ps_checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - - return this; - } - - this.buttonReferenceContainer.prepend(this.checkoutExpressButton); - - this.renderTitle(); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/express-button-product.component.js b/_dev/js/front/src/components/1_6/express-button-product.component.js deleted file mode 100644 index b040e843a..000000000 --- a/_dev/js/front/src/components/1_6/express-button-product.component.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class ExpressButtonProductComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - prestashopService: 'PrestashopService' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerProduct(); - } - - render() { - this.checkoutExpressButton = document.createElement('p'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - this.checkoutExpressButton.classList.add( - 'buttons_bottom_block', - 'no-print' - ); - - const buttonContainer = this.buttonReferenceContainer.parentNode; - - buttonContainer.append(this.checkoutExpressButton); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: '#ps-checkout-express-button' - } - ).render(); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/notification.component.js b/_dev/js/front/src/components/1_6/notification.component.js deleted file mode 100644 index f32858335..000000000 --- a/_dev/js/front/src/components/1_6/notification.component.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class NotificationComponent extends BaseComponent { - static Inject = { - htmlElementService: 'HTMLElementService', - prestashopService: 'PrestashopService', - }; - - constructor(app, props) { - super(app, props); - - this.notificationPaymentContainer = this.htmlElementService.getNotificationPaymentContainer(); - this.notificationPaymentContainerTarget = this.htmlElementService.getNotificationPaymentContainerTarget(); - - this.notificationPaymentCanceled = this.htmlElementService.getNotificationPaymentCanceled(); - - this.notificationPaymentError = this.htmlElementService.getNotificationPaymentError(); - this.notificationPaymentErrorText = this.htmlElementService.getNotificationPaymentErrorText(); - } - - render() { - if (!this.prestashopService.isNativeOnePageCheckoutPage()) { - this.notificationPaymentContainerTarget.prepend( - this.notificationPaymentContainer - ); - } - - return this; - } - - hideConditions() {} - - hideCancelled() { - this.notificationPaymentCanceled.style.display = 'none'; - } - - hideError() { - this.notificationPaymentError.style.display = 'none'; - } - - showCanceled() { - this.notificationPaymentCanceled.style.display = 'block'; - } - - showConditions() {} - - showError(message) { - this.notificationPaymentError.style.display = 'block'; - this.notificationPaymentErrorText.textContent = message; - } -} diff --git a/_dev/js/front/src/components/1_6/pay-later-button-cart.component.js b/_dev/js/front/src/components/1_6/pay-later-button-cart.component.js deleted file mode 100644 index bf3c724a5..000000000 --- a/_dev/js/front/src/components/1_6/pay-later-button-cart.component.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PayLaterButtonCartComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi', - payPalService: 'PayPalService', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCart(); - this.data.orderId = this.payPalService.getOrderId(); - } - - renderComponent() { - if (!document.getElementById('ps_checkout-express-button-cart')) { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps_checkout-express-button-cart'; - this.checkoutExpressButton.classList.add( - 'ps_checkout-express-button', - 'ps_checkout-express-button-cart' - ); - - const separatorText = document.createElement('div'); - separatorText.classList.add('ps_checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - } - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: '#ps_checkout-express-button-cart' - } - ).render(); - } - - render() { - if (!this.buttonReferenceContainer) return; - - this.renderComponent(); - this.prestashopService.onUpdatedShoppingCartExtra(() => { - if (null === document.querySelector('#ps_checkout-express-button-cart')) { - this.renderComponent(); - } - }); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/pay-later-button-checkout.component.js b/_dev/js/front/src/components/1_6/pay-later-button-checkout.component.js deleted file mode 100644 index 0989d7a73..000000000 --- a/_dev/js/front/src/components/1_6/pay-later-button-checkout.component.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PayLaterButtonCheckoutComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi', - payPalService: 'PayPalService', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCheckout(); - this.data.orderId = this.payPalService.getOrderId(); - } - - renderTitle() { - this.checkoutExpressTitle = document.createElement('h3'); - this.checkoutExpressTitle.classList.add('page-heading', 'bottom-indent'); - this.checkoutExpressTitle.innerText = this.$( - 'express-button.checkout.express-checkout' - ); - - this.buttonReferenceContainer.prepend(this.checkoutExpressTitle); - } - - render() { - if (!document.getElementById('ps_checkout-express-button-checkout')) { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps_checkout-express-button-checkout'; - this.checkoutExpressButton.classList.add( - 'ps_checkout-express-button', - 'ps_checkout-express-button-checkout' - ); - } - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: '#ps_checkout-express-button-checkout' - } - ).render(); - - if ( - this.prestashopService.isNativeOnePageCheckoutPage() && - !document.getElementById('ps_checkout-express-button-checkout') - ) { - const separatorText = document.createElement('div'); - separatorText.classList.add('ps_checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - - return this; - } - - if (!document.getElementById('ps_checkout-express-button-checkout')) { - this.buttonReferenceContainer.prepend(this.checkoutExpressButton); - - this.renderTitle(); - } - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/pay-later-button-product.component.js b/_dev/js/front/src/components/1_6/pay-later-button-product.component.js deleted file mode 100644 index f88e51a8a..000000000 --- a/_dev/js/front/src/components/1_6/pay-later-button-product.component.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PayLaterButtonProductComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - prestashopService: 'PrestashopService', - payPalService: 'PayPalService' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerProduct(); - this.data.orderId = this.payPalService.getOrderId(); - } - - render() { - if (!document.getElementById('ps-checkout-express-button')) { - this.checkoutExpressButton = document.createElement('p'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - this.checkoutExpressButton.classList.add( - 'buttons_bottom_block', - 'no-print' - ); - - const buttonContainer = this.buttonReferenceContainer.parentNode; - - buttonContainer.append(this.checkoutExpressButton); - } - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: '#ps-checkout-express-button' - } - ).render(); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_6/payment-options.component.js b/_dev/js/front/src/components/1_6/payment-options.component.js deleted file mode 100644 index 2f86e9f65..000000000 --- a/_dev/js/front/src/components/1_6/payment-options.component.js +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { PaymentOptionComponent } from '../common/payment-option.component'; - -export class PaymentOptionsComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - querySelectorService: 'QuerySelectorService' - }; - - created() { - this.data.HTMLElement = this.querySelectorService.getPaymentOptions(); - } - - renderPaymentOptionItems() { - this.children.paymentOptions = this.payPalService - .getEligibleFundingSources() - .map((fundingSource) => { - const HTMLElement = document.querySelector( - `[data-module-name^="ps_checkout-${fundingSource.name}"]` - ); - - return ( - HTMLElement && - new PaymentOptionComponent(this.app, { - fundingSource: fundingSource, - markPosition: this.props.markPosition, - HTMLElement - }).render() - ); - }) - .filter((paymentOption) => paymentOption); - } - - renderPaymentOptionListener() { - const HTMLListenerElements = this.children.paymentOptions.map( - (paymentOption) => { - const HTMLElement = paymentOption.data.HTMLElementContainer; - const [button, form] = Array.prototype.slice.call( - HTMLElement.querySelectorAll('.payment_module') - ); - - return { button, form }; - } - ); - - this.children.paymentOptions.forEach((paymentOption, index) => { - paymentOption.onLabelClick(() => { - HTMLListenerElements.forEach(({ button, form }) => { - button.classList.add('closed'); - form.classList.add('closed'); - button.classList.remove('open'); - form.classList.remove('open'); - - this.data.notification.hideCancelled(); - this.data.notification.hideError(); - }); - - if ( - this.config.expressCheckout.active && - 'ps_checkout-' + this.payPalService.getFundingSource() !== - HTMLListenerElements[index].button.dataset.moduleName && - this.payPalService.getOrderId() - ) { - this.psCheckoutApi - .postCancelOrder({ - orderID: this.payPalService.getOrderId(), - fundingSource: this.payPalService.getFundingSource(), - isExpressCheckout: true, - reason: 'payment_option_changed' - }) - .then(() => { - this.config.expressCheckout.active = false; - - const expressCheckoutContainer = document.querySelector( - '#ps_checkout-express-checkout-banner' - ); - if (expressCheckoutContainer) { - expressCheckoutContainer.style.display = 'none'; - } - }); - } - - HTMLListenerElements[index].button.classList.add('open'); - HTMLListenerElements[index].button.classList.remove('closed'); - HTMLListenerElements[index].form.classList.add('open'); - HTMLListenerElements[index].form.classList.remove('closed'); - }); - }); - - if (this.config.expressCheckout.active) { - HTMLListenerElements.forEach(({ button, form }) => { - if ( - button.dataset.moduleName === - 'ps_checkout-' + this.payPalService.getFundingSource() - ) { - button.classList.add('open'); - button.classList.remove('closed'); - form.classList.add('open'); - form.classList.remove('closed'); - } - }); - } - } - - render() { - this.data.conditions = this.app.root.children.conditionsCheckbox; - this.data.notification = this.app.root.children.notification; - this.data.loader = this.app.root.children.loader; - - this.renderPaymentOptionItems(); - this.renderPaymentOptionListener(); - - return this; - } -} diff --git a/_dev/js/front/src/components/1_7/conditions-checkbox.component.js b/_dev/js/front/src/components/1_7/conditions-checkbox.component.js deleted file mode 100644 index 365054c08..000000000 --- a/_dev/js/front/src/components/1_7/conditions-checkbox.component.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class ConditionsCheckboxComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService' - }; - - created() { - this.conditionsCheckboxes = - this.querySelectorService.getConditionsCheckboxes(); - } - - isActive() { - return this.conditionsCheckboxes?.length > 0; - } - - isChecked() { - if (this.isActive()) { - return this.conditionsCheckboxes?.every(({ checked }) => checked); - } - - return true; - } - - onChange(listener) { - this.conditionsCheckboxes?.forEach((checkbox) => - checkbox.addEventListener('change', listener) - ); - } -} diff --git a/_dev/js/front/src/components/1_7/express-button-cart.component.js b/_dev/js/front/src/components/1_7/express-button-cart.component.js deleted file mode 100644 index 66dafe5d2..000000000 --- a/_dev/js/front/src/components/1_7/express-button-cart.component.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class ExpressButtonCartComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCart(); - } - - render() { - if (!this.buttonReferenceContainer) return; - - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - - const separatorText = document.createElement('div'); - separatorText.classList.add('ps-checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: '#ps-checkout-express-button' - } - ).render(); - return this; - } -} diff --git a/_dev/js/front/src/components/1_7/express-button-checkout.component.js b/_dev/js/front/src/components/1_7/express-button-checkout.component.js deleted file mode 100644 index 12ebd9384..000000000 --- a/_dev/js/front/src/components/1_7/express-button-checkout.component.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class ExpressButtonCheckoutComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCheckout(); - } - - renderTitle() { - this.checkoutExpressTitle = document.createElement('ul'); - this.checkoutExpressTitle.classList.add('nav', 'nav-inline', 'my-1'); - - this.checkoutExpressTitleItem = document.createElement('li'); - this.checkoutExpressTitleItem.classList.add('nav-item'); - - this.checkoutExpressTitleItemHeading = document.createElement('div'); - this.checkoutExpressTitleItemHeading.classList.add('nav-link', 'active'); - this.checkoutExpressTitleItemHeading.innerText = this.$( - 'express-button.checkout.express-checkout' - ); - - this.checkoutExpressTitleItem.append(this.checkoutExpressTitleItemHeading); - this.checkoutExpressTitle.append(this.checkoutExpressTitleItem); - } - - render() { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - - this.renderTitle(); - - this.buttonReferenceContainer.prepend(this.checkoutExpressButton); - this.buttonReferenceContainer.prepend(this.checkoutExpressTitle); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: '#ps-checkout-express-button' - } - ).render(); - return this; - } -} diff --git a/_dev/js/front/src/components/1_7/express-button-product.component.js b/_dev/js/front/src/components/1_7/express-button-product.component.js deleted file mode 100644 index 90ca88f5e..000000000 --- a/_dev/js/front/src/components/1_7/express-button-product.component.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -const BUTTON_CONTAINER_SELECTOR = 'ps-checkout-express-button'; - -export class ExpressButtonProductComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - prestashopService: 'PrestashopService' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerProduct(); - } - - render() { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = BUTTON_CONTAINER_SELECTOR; - - const productQuantityHTMLElement = - this.buttonReferenceContainer.nextElementSibling; - - this.buttonReferenceContainer.parentNode.insertBefore( - this.checkoutExpressButton, - productQuantityHTMLElement - ); - - this.updateButtonContainerVisibility(); - - this.prestashopService.onUpdatedProduct(() => { - this.updateButtonContainerVisibility(); - }); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paypal', - querySelector: `#${BUTTON_CONTAINER_SELECTOR}` - } - ).render(); - - return this; - } - - updateButtonContainerVisibility() { - if (this.prestashopService.isAddToCartButtonDisabled()) { - document - .getElementById(BUTTON_CONTAINER_SELECTOR) - .classList.add('disabled'); - } else { - document - .getElementById(BUTTON_CONTAINER_SELECTOR) - .classList.remove('disabled'); - } - } -} diff --git a/_dev/js/front/src/components/1_7/notification.component.js b/_dev/js/front/src/components/1_7/notification.component.js deleted file mode 100644 index f56d143ef..000000000 --- a/_dev/js/front/src/components/1_7/notification.component.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class NotificationComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService' - }; - - created() { - this.notificationConditions = this.querySelectorService.getNotificationConditions(); - - this.notificationPaymentCanceled = this.querySelectorService.getNotificationPaymentCanceled(); - this.notificationPaymentError = this.querySelectorService.getNotificationPaymentError(); - this.notificationPaymentErrorText = this.querySelectorService.getNotificationPaymentErrorText(); - } - - hideCancelled() { - this.notificationPaymentCanceled.style.display = 'none'; - } - - hideConditions() { - if (this.notificationConditions) { - this.notificationConditions.style.display = 'none'; - } - } - - hideError() { - this.notificationPaymentError.style.display = 'none'; - } - - showCanceled() { - this.notificationPaymentCanceled.style.display = 'block'; - } - - showConditions() { - if (this.notificationConditions) { - this.notificationConditions.style.display = 'block'; - } - } - - showError(message) { - this.notificationPaymentError.style.display = 'block'; - this.notificationPaymentErrorText.textContent = message; - } -} diff --git a/_dev/js/front/src/components/1_7/pay-later-button-cart.component.js b/_dev/js/front/src/components/1_7/pay-later-button-cart.component.js deleted file mode 100644 index b9ee83180..000000000 --- a/_dev/js/front/src/components/1_7/pay-later-button-cart.component.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PayLaterButtonCartComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - payPalService: 'PayPalService', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCart(); - this.data.orderId = this.payPalService.getOrderId(); - } - - render() { - if (!this.buttonReferenceContainer) return; - - if (!document.getElementById('ps-checkout-express-button')) { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - - const separatorText = document.createElement('div'); - separatorText.classList.add('ps-checkout-express-separator'); - separatorText.innerText = this.$('express-button.cart.separator'); - - this.buttonReferenceContainer.append(separatorText); - this.buttonReferenceContainer.append(this.checkoutExpressButton); - } - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: '#ps-checkout-express-button' - } - ).render(); - return this; - } -} diff --git a/_dev/js/front/src/components/1_7/pay-later-button-checkout.component.js b/_dev/js/front/src/components/1_7/pay-later-button-checkout.component.js deleted file mode 100644 index aaa245d3c..000000000 --- a/_dev/js/front/src/components/1_7/pay-later-button-checkout.component.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PayLaterButtonCheckoutComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - payPalService: 'PayPalService', - $: '$' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerCheckout(); - this.data.orderId = this.payPalService.getOrderId(); - } - - renderTitle() { - this.checkoutExpressTitle = document.createElement('ul'); - this.checkoutExpressTitle.classList.add('nav', 'nav-inline', 'my-1'); - - this.checkoutExpressTitleItem = document.createElement('li'); - this.checkoutExpressTitleItem.classList.add('nav-item'); - - this.checkoutExpressTitleItemHeading = document.createElement('div'); - this.checkoutExpressTitleItemHeading.classList.add('nav-link', 'active'); - this.checkoutExpressTitleItemHeading.innerText = this.$( - 'express-button.checkout.express-checkout' - ); - - this.checkoutExpressTitleItem.append(this.checkoutExpressTitleItemHeading); - this.checkoutExpressTitle.append(this.checkoutExpressTitleItem); - } - - render() { - if (!document.getElementById('ps-checkout-express-button')) { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = 'ps-checkout-express-button'; - - this.renderTitle(); - - this.buttonReferenceContainer.prepend(this.checkoutExpressButton); - this.buttonReferenceContainer.prepend(this.checkoutExpressTitle); - } - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: '#ps-checkout-express-button' - } - ).render(); - return this; - } -} diff --git a/_dev/js/front/src/components/1_7/pay-later-button-product.component.js b/_dev/js/front/src/components/1_7/pay-later-button-product.component.js deleted file mode 100644 index fb2313471..000000000 --- a/_dev/js/front/src/components/1_7/pay-later-button-product.component.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -const BUTTON_CONTAINER_SELECTOR = 'ps-checkout-express-button'; - -export class PayLaterButtonProductComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - psCheckoutApi: 'PsCheckoutApi', - prestashopService: 'PrestashopService', - payPalService: 'PayPalService' - }; - - created() { - this.buttonReferenceContainer = - this.querySelectorService.getExpressCheckoutButtonContainerProduct(); - this.data.orderId = this.payPalService.getOrderId(); - } - - render() { - if (!document.getElementById(BUTTON_CONTAINER_SELECTOR)) { - this.checkoutExpressButton = document.createElement('div'); - this.checkoutExpressButton.id = BUTTON_CONTAINER_SELECTOR; - - const productQuantityHTMLElement = - this.buttonReferenceContainer.nextElementSibling; - - this.buttonReferenceContainer.parentNode.insertBefore( - this.checkoutExpressButton, - productQuantityHTMLElement - ); - } - - this.updateButtonContainerVisibility(); - - this.prestashopService.onUpdatedProduct(() => { - this.updateButtonContainerVisibility(); - }); - - this.children.expressCheckoutButton = new ExpressCheckoutButtonComponent( - this.app, - { - fundingSource: 'paylater', - querySelector: `#${BUTTON_CONTAINER_SELECTOR}` - } - ).render(); - - return this; - } - - updateButtonContainerVisibility() { - if (this.prestashopService.isAddToCartButtonDisabled()) { - document - .getElementById(BUTTON_CONTAINER_SELECTOR) - .classList.add('disabled'); - } else { - document - .getElementById(BUTTON_CONTAINER_SELECTOR) - .classList.remove('disabled'); - } - } -} diff --git a/_dev/js/front/src/components/1_7/payment-options.component.js b/_dev/js/front/src/components/1_7/payment-options.component.js deleted file mode 100644 index 0eba9aebf..000000000 --- a/_dev/js/front/src/components/1_7/payment-options.component.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { PaymentOptionComponent } from '../common/payment-option.component'; - -export class PaymentOptionsComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - querySelectorService: 'QuerySelectorService' - }; - - created() { - this.data.HTMLElementPaymentOptionsContainer = this.querySelectorService.getPaymentOptions(); - this.data.HTMLBasePaymentConfirmation = this.querySelectorService.getBasePaymentConfirmation(); - } - - renderPaymentOptionItems() { - this.children.paymentOptions = this.payPalService - .getEligibleFundingSources() - .map((fundingSource) => { - const HTMLElement = document.querySelector( - `[data-module-name^="ps_checkout-${fundingSource.name}"]` - ); - - if ( - this.config.expressCheckout.active && - this.payPalService.getFundingSource() === fundingSource.name - ) { - HTMLElement.click(); - } - - return ( - HTMLElement && - new PaymentOptionComponent(this.app, { - fundingSource: fundingSource, - markPosition: this.props.markPosition, - HTMLElement - }).render() - ); - }) - .filter((paymentOption) => paymentOption); - } - - renderPaymentOptionListener() { - const radios = this.querySelectorService.getPaymentOptionRadios(); - radios.forEach((radio) => { - radio.addEventListener('change', () => { - this.data.notification.hideCancelled(); - this.data.notification.hideError(); - - if ( - this.config.expressCheckout.active && - 'ps_checkout-' + this.payPalService.getFundingSource() !== - radio.dataset.moduleName && - this.payPalService.getOrderId() - ) { - this.psCheckoutApi - .postCancelOrder({ - orderID: this.payPalService.getOrderId(), - fundingSource: this.payPalService.getFundingSource(), - isExpressCheckout: true, - reason: 'payment_option_changed' - }) - .then(() => { - this.config.expressCheckout.active = false; - - const expressCheckoutContainer = document.querySelector( - '#ps_checkout-express-checkout-banner' - ); - if (expressCheckoutContainer) { - expressCheckoutContainer.style.display = 'none'; - } - }); - } - }); - }); - } - - render() { - this.data.conditions = this.app.root.children.conditionsCheckbox; - this.data.notification = this.app.root.children.notification; - this.data.loader = this.app.root.children.loader; - - this.renderPaymentOptionItems(); - this.renderPaymentOptionListener(); - - return this; - } -} diff --git a/_dev/js/front/src/components/common/card-fields.component.js b/_dev/js/front/src/components/common/card-fields.component.js deleted file mode 100644 index 878a1e7f7..000000000 --- a/_dev/js/front/src/components/common/card-fields.component.js +++ /dev/null @@ -1,380 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * @typedef PaypalCardFieldCardField - * @type {*} - * - * @property {boolean} isEmpty - * @property {boolean} isValid - * @property {boolean} isPotentiallyValid - * @property {boolean} isFocused - */ - -/** - * @typedef PaypalCardFieldsEvent - * @type {*} - * - * @property {string} emittedBy - * @property {boolean} isFormValid - * @property {String[]} errors - * @property {*} fields - * @property {PaypalCardFieldCardField} fields.cardCvvField - * @property {PaypalCardFieldCardField} fields.cardExpiryField - * @property {PaypalCardFieldCardField} fields.cardNameField - * @property {PaypalCardFieldCardField} fields.cardNumberField - */ - -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class CardFieldsComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - configPayPal: 'PayPalSdkConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - querySelectorService: 'QuerySelectorService', - $: '$' - }; - - created() { - this.data.name = this.props.fundingSource.name; - this.data.validity = false; - this.data.orderId = null; - /** - * @property {PaypalCardFieldsEvent} data.cardFieldsState - */ - this.data.cardFieldsState = {}; - - this.data.cardFieldsFocused = { - name: false, - number: false, - expiry: false, - cvv: false - }; - this.data.HTMLElement = this.props.HTMLElement; - this.data.HTMLElementCardForm = - this.querySelectorService.getCardFieldsFormContainer(); - this.data.HTMLElementBaseButton = - this.querySelectorService.getBasePaymentConfirmation(); - this.data.HTMLElementButton = null; - this.data.HTMLElementButtonWrapper = this.getButtonWrapper(); - - this.data.HTMLElementCardHolderName = - this.querySelectorService.getCardFieldsNameInputContainer(); - this.data.HTMLElementCardNumber = - this.querySelectorService.getCardFieldsNumberInputContainer(); - this.data.HTMLElementCardExpiry = - this.querySelectorService.getCardFieldsExpiryInputContainer(); - this.data.HTMLElementCardCvv = - this.querySelectorService.getCardFieldsCvvInputContainer(); - - this.data.HTMLElementCardNameError = - this.querySelectorService.getCardFieldsNameError(); - this.data.HTMLElementCardNumberError = - this.querySelectorService.getCardFieldsNumberError(); - this.data.HTMLElementCardVendorError = - this.querySelectorService.getCardFieldsVendorError(); - this.data.HTMLElementCardExpiryError = - this.querySelectorService.getCardFieldsExpiryError(); - this.data.HTMLElementCardCvvError = - this.querySelectorService.getCardFieldsCvvError(); - } - - getButtonWrapper() { - const buttonWrapper = `.ps_checkout-button[data-funding-source=${this.data.name}]`; - return document.querySelector(buttonWrapper); - } - - isSubmittable() { - return this.data.conditions - ? this.data.conditions.isChecked() && this.data.validity - : this.data.validity; - } - - isFormValid() { - const { cardNameField, cardNumberField, cardExpiryField, cardCvvField } = - this.data.cardFieldsState.fields; - return ( - (cardNameField.isEmpty || cardNameField.isValid) && - cardNumberField.isValid && - cardExpiryField.isValid && - cardCvvField.isValid - ); - } - - setFocusedField(fieldName) { - this.data.cardFieldsFocused[fieldName] = true; - } - - toggleCardNameFieldError() { - const { isFocused, isEmpty, isValid, isPotentiallyValid } = - this.data.cardFieldsState.fields.cardNameField; - const hideError = isEmpty || isFocused || isValid; - - this.data.HTMLElementCardNameError.classList.toggle('hidden', hideError); - } - - toggleCardNumberFieldError() { - const { isFocused, isEmpty, isValid, isPotentiallyValid } = - this.data.cardFieldsState.fields.cardNumberField; - const hideError = - isFocused || !this.data.cardFieldsFocused.number || isValid; - - this.data.HTMLElementCardNumberError.classList.toggle( - 'hidden', - !isPotentiallyValid || hideError - ); - this.data.HTMLElementCardVendorError.classList.toggle( - 'hidden', - isPotentiallyValid - ); - } - - toggleCardExpiryFieldError() { - const { isFocused, isEmpty, isValid, isPotentiallyValid } = - this.data.cardFieldsState.fields.cardExpiryField; - const hideError = - isPotentiallyValid && - (isFocused || !this.data.cardFieldsFocused.expiry || isValid); - - this.data.HTMLElementCardExpiryError.classList.toggle('hidden', hideError); - } - toggleCardCvvFieldError() { - const { isFocused, isEmpty, isValid, isPotentiallyValid } = - this.data.cardFieldsState.fields.cardCvvField; - const hideError = isFocused || !this.data.cardFieldsFocused.cvv || isValid; - - this.data.HTMLElementCardCvvError.classList.toggle('hidden', hideError); - } - - toggleCardFieldsErrors() { - this.toggleCardNameFieldError(); - this.toggleCardNumberFieldError(); - this.toggleCardExpiryFieldError(); - this.toggleCardCvvFieldError(); - } - - /** - * @param {PaypalCardFieldsEvent} event - */ - updateCardFieldsState(event) { - this.setFocusedField(event.emittedBy); - this.data.cardFieldsState = event; - this.data.validity = this.isFormValid(); - - this.isSubmittable() - ? this.data.HTMLElementButton.removeAttribute('disabled') - : this.data.HTMLElementButton.setAttribute('disabled', ''); - - this.toggleCardFieldsErrors(); - } - - getVaultFormData() { - if (this.data.HTMLElementCardForm) { - const formData = new FormData(this.data.HTMLElementCardForm); - return { - vault: formData.get(`ps_checkout-vault-payment-${this.data.name}`) === '1', - favorite: formData.get(`ps_checkout-favorite-payment-${this.data.name}`) === '1' - }; - - } - return {}; - } - - renderPayPalCardFields() { - this.data.HTMLElementCardForm.classList.toggle('loading', true); - - const style = { - ...{ - input: { - 'font-size': '17px', - 'font-family': 'helvetica, tahoma, calibri, sans-serif', - color: '#3a3a3a', - padding: '8px 12px' - }, - ':focus': { - color: 'black' - }, - body: { - padding: '0 0 5px 0' - } - }, - ...(this.configPayPal.hostedFieldsCustomization || {}), - ...(window.ps_checkout.hostedFieldsCustomization || {}) - }; - - this.payPalService - .getCardFields( - { - name: this.data.HTMLElementCardHolderName, - number: this.data.HTMLElementCardNumber, - cvv: this.data.HTMLElementCardCvv, - expiry: this.data.HTMLElementCardExpiry - }, - { - style, - createOrder: async (data) => { - this.data.HTMLElementButton.setAttribute('disabled', true); - - return this.psCheckoutApi - .postCreateOrder({ - ...this.getVaultFormData(), - ...data, - fundingSource: this.data.name, - isCardFields: true - }) - .then((data) => { - this.data.orderId = data; - return data; - }) - .catch((error) => { - throw error; - }); - }, - onApprove: async (data) => { - return this.psCheckoutApi - .postValidateOrder({ - ...data, - fundingSource: this.data.name, - isHostedFields: true - }) - .catch((error) => { - let message = error.message || ''; - - if (!message) { - message = `Unknown error, code: ${ - error.code || 'none' - }, description: ${error.description || 'none'}`; - } - - this.data.loader.hide(); - this.data.notification.showError(message); - this.data.HTMLElementButton.removeAttribute('disabled'); - }); - }, - onError: async (error) => { - this.data.loader.hide(); - let message = error.message || this.$('checkout.form.error.label'); - this.data.notification.showError(message); - this.data.HTMLElementButton.removeAttribute('disabled'); - - return this.psCheckoutApi - .postCancelOrder({ - orderID: this.data.orderId, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - reason: 'card_fields_error', - error: error instanceof Error ? error.message : error - }) - .catch((error) => console.error(error)); - }, - inputEvents: { - /** - * @param {PaypalCardFieldsEvent} event - */ - onChange: (event) => { - this.updateCardFieldsState(event); - this.data.cardFields = event; - }, - /** - * @param {PaypalCardFieldsEvent} event - */ - onFocus: (event) => { - this.updateCardFieldsState(event); - window.ps_checkout.events.dispatchEvent( - new CustomEvent('hostedFieldsFocus', { - detail: { ps_checkout: window.ps_checkout, event } - }) - ); - }, - /** - * @param {PaypalCardFieldsEvent} event - */ - onBlur: (event) => { - this.updateCardFieldsState(event); - window.ps_checkout.events.dispatchEvent( - new CustomEvent('hostedFieldsBlur', { - detail: { ps_checkout: window.ps_checkout, event } - }) - ); - }, - /** - * @param {PaypalCardFieldsEvent} event - */ - onInputSubmitRequest: (event) => { - this.updateCardFieldsState(event); - } - } - } - ) - .then((cardFields) => { - this.data.HTMLElementCardForm.classList.toggle('loading', false); - - if (this.data.HTMLElementCardForm.style.display === 'none') { - this.data.HTMLElementCardForm.style.display = 'block'; - } - - if (this.data.HTMLElement !== null) { - this.data.HTMLElementButton.addEventListener('click', (event) => { - event.preventDefault(); - - if (!this.data.validity) { - this.data.HTMLElementButton.setAttribute('disabled', ''); - return; - } - - this.data.loader.show(); - this.data.HTMLElementButton.setAttribute('disabled', ''); - - cardFields.submit(); - }); - } - }); - } - - renderButton() { - this.data.HTMLElementButton = - this.data.HTMLElementBaseButton.cloneNode(true); - - this.data.HTMLElementButtonWrapper.append(this.data.HTMLElementButton); - this.data.HTMLElementButton.classList.remove('disabled'); - this.data.HTMLElementButton.style.display = ''; - this.data.HTMLElementButton.disabled = !this.isSubmittable(); - - this.data.conditions && - this.data.conditions.onChange(() => { - // In some PS versions, the handler fails to disable the button because of the timing. - setTimeout(() => { - this.data.HTMLElementButton.disabled = !this.isSubmittable(); - }, 0); - }); - } - - render() { - this.data.conditions = this.app.root.children.conditionsCheckbox; - this.data.notification = this.app.root.children.notification; - this.data.loader = this.app.root.children.loader; - - this.renderButton(); - this.renderPayPalCardFields(); - - return this; - } -} diff --git a/_dev/js/front/src/components/common/express-checkout-button.component.js b/_dev/js/front/src/components/common/express-checkout-button.component.js deleted file mode 100644 index 4d06e0ae5..000000000 --- a/_dev/js/front/src/components/common/express-checkout-button.component.js +++ /dev/null @@ -1,182 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class ExpressCheckoutButtonComponent extends BaseComponent { - static Inject = { - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - prestashopService: 'PrestashopService', - $: '$' - }; - - created() { - this.data.orderId = this.payPalService.getOrderId(); - } - - onInit(data, actions) { - return actions.enable(); - } - - onClick(data, actions) { - return this.psCheckoutApi - .postCheckCartOrder( - { - ...data, - fundingSource: this.props.fundingSource, - isExpressCheckout: true, - orderID: this.data.orderId - }, - actions - ) - .catch((error) => { - actions.reject(); - throw error; - }); - } - - onError(error) { - const errorText = error?.message ? error.message : error; - this.notifyError(errorText); - console.error(error); - - return this.psCheckoutApi - .postCancelOrder({ - orderID: this.data.orderId, - fundingSource: this.props.fundingSource, - isExpressCheckout: true, - reason: 'express_checkout_error', - error: errorText - }) - .catch((error) => console.error(error)); - } - - onApprove(data, actions) { - return this.psCheckoutApi.postExpressCheckoutOrder( - { - ...data, - fundingSource: this.props.fundingSource, - isExpressCheckout: true - }, - actions - ); - } - - onCancel(data) { - return this.psCheckoutApi.postCancelOrder({ - ...data, - orderID: this.data.orderId, - fundingSource: this.props.fundingSource, - isExpressCheckout: true, - reason: 'express_checkout_cancelled' - }); - } - - createOrder(data) { - let extraData = {}; - - if (this.prestashopService.isProductPage()) { - let { - id_product, - id_product_attribute, - id_customization, - quantity_wanted - } = this.prestashopService.getProductDetails(); - extraData = { - id_product, - id_product_attribute, - id_customization, - quantity_wanted - }; - } - - return this.psCheckoutApi - .postCreateOrder({ - ...data, - ...extraData - }) - .then((data) => { - this.data.orderId = data; - return data; - }) - .catch((error) => { - throw error; - }); - } - - notifyError(message) { - const expressCheckoutContainer = document.querySelector( - this.props.querySelector - ); - const notificationContainerIdentifier = - 'ps_checkout-product-notification-container'; - let notificationContainerElement = document.getElementById( - notificationContainerIdentifier - ); - - if (!notificationContainerElement) { - notificationContainerElement = document.createElement('div'); - notificationContainerElement.id = notificationContainerIdentifier; - expressCheckoutContainer.prepend(notificationContainerElement); - } - - const notificationIdentifier = 'ps_checkout-product-notification-container'; - const currentNotificationElement = document.querySelector( - '#' + notificationContainerIdentifier + ' .' + notificationIdentifier - ); - - if (currentNotificationElement) { - return (currentNotificationElement.textContent = message); - } - - const notificationElement = document.createElement('div'); - notificationElement.classList.add( - 'alert', - 'alert-danger', - notificationIdentifier - ); - notificationElement.textContent = message; - notificationContainerElement.appendChild(notificationElement); - } - - renderPayPalButton() { - if ( - !this.payPalService - .getEligibleFundingSources() - .filter(({ name }) => name === this.props.fundingSource).length > 0 - ) - return; - - return this.payPalService - .getButtonExpress(this.props.fundingSource, { - onInit: (data, actions) => this.onInit(data, actions), - onClick: (data, actions) => this.onClick(data, actions), - onError: (error) => this.onError(error), - onApprove: (data, actions) => this.onApprove(data, actions), - onCancel: (data) => this.onCancel(data), - createOrder: (data) => this.createOrder(data) - }) - .render(this.props.querySelector); - } - - render() { - this.renderPayPalButton(); - return this; - } -} diff --git a/_dev/js/front/src/components/common/loader.component.js b/_dev/js/front/src/components/common/loader.component.js deleted file mode 100644 index 38a8bb256..000000000 --- a/_dev/js/front/src/components/common/loader.component.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class LoaderComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - config: 'PsCheckoutConfig', - $: '$' - }; - - created() { - this.data.text = this.props.text || this.$('loader-component.label.body'); - this.data.header = this.props.header || this.$('loader-component.label.header'); - this.data.parent = this.querySelectorService.getLoaderParent(); - } - - render() { - this.overlay = document.createElement('div'); - this.overlay.classList.add('ps-checkout', 'overlay'); - - this.popup = document.createElement('div'); - this.popup.classList.add('ps-checkout', 'popup'); - - this.text = document.createElement('h1'); - this.text.classList.add('ps-checkout', 'text'); - this.text.innerHTML = this.data.header; - - this.loader = document.createElement('img'); - this.loader.classList.add('ps-checkout', 'loader'); - this.loader.setAttribute('src', this.config.loaderImage); - this.loader.setAttribute('alt', 'loader'); - - this.subtext = document.createElement('div'); - this.subtext.classList.add('ps-checkout', 'subtext'); - this.text.innerHTML = this.data.text; - - this.popup.append(this.text); - this.popup.append(this.loader); - this.popup.append(this.subtext); - - this.overlay.append(this.popup); - this.data.parent.append(this.overlay); - - return this; - } - - show() { - this.overlay.classList.add('visible'); - document.body.style.overflow = 'hidden'; - } - - hide() { - this.overlay.classList.remove('visible'); - document.body.style.overflow = ''; - } - - destroy() { - this.overlay.classList.add('visible'); - this.overlay.remove(); - } -} diff --git a/_dev/js/front/src/components/common/loader.component.spec.js b/_dev/js/front/src/components/common/loader.component.spec.js deleted file mode 100644 index a71dd036f..000000000 --- a/_dev/js/front/src/components/common/loader.component.spec.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PsCheckoutConfig } from '../../config/ps-checkout.config'; -import { LoaderComponent } from './loader.component'; - -function buildDIContainerMock() { - return { - container: { - PsCheckoutConfig: { - ...PsCheckoutConfig - }, - QuerySelectorService: { - getLoaderParent: jest.fn() - }, - $: jest.fn().mockImplementation(key => { - return ( - { - 'funding-source.name.foo': 'Foo', - 'funding-source.name.default': 'Default' - }[key] || '' - ); - }) - } - }; -} - -describe('src/components/common/loader.component.spec.js', () => { - afterEach(() => (document.body.innerHTML = '')); - - test('::render()', () => { - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getLoaderParent.mockImplementationOnce( - () => document.body - ); - - const loaderComponent = new LoaderComponent(diContainer); - expect(loaderComponent.render()).toBe(loaderComponent); - - const overlayHTMLElement = document.querySelector('.ps-checkout.overlay'); - expect(overlayHTMLElement.parentElement).toBe(document.body); - - const popupHTMLElement = document.querySelector('.ps-checkout.popup'); - expect(popupHTMLElement.parentElement).toBe(overlayHTMLElement); - - const popupTextHTMLElement = document.querySelector('.ps-checkout.text'); - expect(popupTextHTMLElement.parentElement).toBe(popupHTMLElement); - - const popupLoaderHTMLElement = document.querySelector( - '.ps-checkout.loader' - ); - expect(popupLoaderHTMLElement.parentElement).toBe(popupHTMLElement); - - const popupSubtextHTMLElement = document.querySelector( - '.ps-checkout.subtext' - ); - expect(popupSubtextHTMLElement.parentElement).toBe(popupHTMLElement); - }); - - test('::show() ', () => { - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getLoaderParent.mockImplementationOnce( - () => document.body - ); - - const loaderComponent = new LoaderComponent(diContainer); - expect(loaderComponent.render()).toBe(loaderComponent); - - const overlayHTMLElement = document.querySelector('.ps-checkout.overlay'); - expect(overlayHTMLElement.parentElement).toBe(document.body); - expect(overlayHTMLElement.classList).not.toContain('visible'); - - loaderComponent.show(); - expect(overlayHTMLElement.classList).toContain('visible'); - }); - - test('::hide() ', () => { - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getLoaderParent.mockImplementationOnce( - () => document.body - ); - - const loaderComponent = new LoaderComponent(diContainer); - expect(loaderComponent.render()).toBe(loaderComponent); - - const overlayHTMLElement = document.querySelector('.ps-checkout.overlay'); - expect(overlayHTMLElement.parentElement).toBe(document.body); - expect(overlayHTMLElement.classList).not.toContain('visible'); - - loaderComponent.show(); - expect(overlayHTMLElement.classList).toContain('visible'); - - loaderComponent.hide(); - expect(overlayHTMLElement.classList).not.toContain('visible'); - }); -}); diff --git a/_dev/js/front/src/components/common/marker.component.js b/_dev/js/front/src/components/common/marker.component.js deleted file mode 100644 index ac0a0da07..000000000 --- a/_dev/js/front/src/components/common/marker.component.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -/** - * @typedef MarkComponentProps - * - * @param {string} fundingSource.name - * @param {*} fundingSource.mark - * - * @param {HTMLElement} HTMLElement - */ - -export class MarkComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig' - }; - - created() { - this.data.name = this.props.fundingSource.name; - this.data.mark = this.props.fundingSource.mark; - - this.data.HTMLElement = this.props.HTMLElement; - this.data.HTMLElementImage = this.props.HTMLElementImage || null; - } - - hasCustomMark() { - return this.config.customMark[this.data.name]; - } - - renderCustomMark() { - const src = this.config.customMark[this.data.name]; - let logoList = []; - - if (this.data.name === 'card' && this.config.cardSupportedBrands && this.config.cardLogoBrands) { - this.config.cardSupportedBrands.forEach(brand => { - if (this.config.cardLogoBrands[brand]) { - let customMarkImg = document.createElement('img'); - customMarkImg.classList.add('cards-logo'); - customMarkImg.setAttribute('alt', brand); - customMarkImg.setAttribute('src', this.config.cardLogoBrands[brand]); - logoList.push(customMarkImg); - let space = document.createElement('span'); - space.classList.add('paypal-button-space'); - space.innerText = ' '; - logoList.push(space); - } - }); - } else { - let customMarkImg = document.createElement('img'); - customMarkImg.classList.add('cards-logo'); - customMarkImg.setAttribute('alt', this.data.name); - customMarkImg.setAttribute('src', src); - logoList.push(customMarkImg); - } - - this.data.HTMLElement.classList.add('paypal-mark'); - logoList.forEach(customMarkImg => this.data.HTMLElement.append(customMarkImg)); - } - - render() { - this.data.HTMLElement.classList.add('ps_checkout-mark'); - this.data.HTMLElement.setAttribute('data-funding-source', this.data.name); - - if (this.hasCustomMark()) { - this.renderCustomMark(); - } else { - const markSelector = `.ps_checkout-mark[data-funding-source=${this.data.name}]`; - this.data.mark.render(markSelector); - } - - return this; - } -} diff --git a/_dev/js/front/src/components/common/marker.component.spec.js b/_dev/js/front/src/components/common/marker.component.spec.js deleted file mode 100644 index c0bba8838..000000000 --- a/_dev/js/front/src/components/common/marker.component.spec.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { MarkComponent } from './marker.component'; - -function buildDIContainerMock() { - return { - container: { - PsCheckoutConfig: { - customMark: { - bar: 'baz' - } - } - } - }; -} - -describe('src/components/common/marker.component.spec.js', () => { - beforeEach(() => (document.body.innerHTML = `
`)); - - afterEach(() => (document.body.innerHTML = '')); - - test('::render() with custom mark', () => { - const HTMLElement = document.getElementById('foo'); - const fundingSource = { - name: 'bar', - mark: { render: jest.fn() } - }; - - const diContainer = buildDIContainerMock(); - const component = new MarkComponent(diContainer, { - fundingSource, - HTMLElement - }); - - expect(component.render()).toBe(component); - - const image = document.querySelector('img'); - expect(image.classList.contains('ps-checkout-funding-img')).toBeTruthy(); - expect(image.getAttribute('alt')).toBe(fundingSource.name); - expect(image.getAttribute('src')).toBe( - diContainer.container.PsCheckoutConfig.customMark.bar - ); - - expect(HTMLElement.classList.contains('ps_checkout-mark')).toBeTruthy(); - expect(HTMLElement.getAttribute('data-funding-source')).toBe( - fundingSource.name - ); - }); - - test('::render() with default mark', () => { - const HTMLElement = document.getElementById('foo'); - const fundingSource = { - name: 'foo', - mark: { render: jest.fn() } - }; - - const selector = `.ps_checkout-mark[data-funding-source=${fundingSource.name}]`; - - const diContainer = buildDIContainerMock(); - const component = new MarkComponent(diContainer, { - fundingSource, - HTMLElement - }); - - expect(component.render()).toBe(component); - - expect(fundingSource.mark.render).toHaveBeenCalledWith(selector); - - expect(HTMLElement.classList.contains('ps_checkout-mark')).toBeTruthy(); - expect(HTMLElement.getAttribute('data-funding-source')).toBe( - fundingSource.name - ); - }); -}); diff --git a/_dev/js/front/src/components/common/modal.component.js b/_dev/js/front/src/components/common/modal.component.js deleted file mode 100644 index 050922226..000000000 --- a/_dev/js/front/src/components/common/modal.component.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class ModalComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService', - config: 'PsCheckoutConfig', - $: '$' - }; - - created() { - this.data.parent = this.querySelectorService.getLoaderParent(); - this.data.icon = this.props.icon || null; - this.data.iconType = this.props.iconType || 'info' - this.data.header = this.props.header || null; - this.data.content = this.props.content || null; - this.data.confirmText = this.props.confirmText || this.$('ok'); - this.data.confirmType = this.props.confirmType || 'primary'; - this.data.cancelText = this.props.cancelText || this.$('cancel'); - this.data.cancelType = this.props.cancelType || 'primary'; - this.data.onConfirm = this.props.onConfirm || (() => {}); - this.data.onCancel = this.props.onCancel || (() => {}); - this.data.onClose = this.props.onClose || (() => {}); - } - - render() { - this.overlay = document.createElement('div'); - this.overlay.classList.add('ps-checkout', 'overlay'); - - this.overlay.addEventListener('click', (event) => { - if (event.target === this.overlay) { - this.data.onClose(); - this.hide(); - } - }) - - this.modal = document.createElement('div'); - this.modal.classList.add('ps-checkout', 'ps-checkout-modal'); - - this.closeButton = document.createElement('button'); - this.closeButton.classList.add('ps-checkout-modal', 'close-button'); - this.closeButtonIcon = document.createElement('img'); - this.closeButtonIcon.src = this.config.iconPath + 'close.svg'; - this.closeButton.append(this.closeButtonIcon); - - this.closeButton.addEventListener('click', (event) => { - event.preventDefault(); - this.data.onClose(); - this.hide(); - }) - - this.modal.append(this.closeButton); - - this.header = document.createElement('h1'); - this.header.classList.add('ps-checkout', 'header'); - - if (this.data.icon) { - this.iconSpan = document.createElement('span'); - this.iconSpan.classList.add('ps-checkout', 'ps-checkout-modal-icon', `icon-${this.data.iconType}`); - this.icon = document.createElement('img'); - this.icon.src = this.config.iconPath + this.data.icon + '.svg' - this.iconSpan.append(this.icon); - this.header.append(this.iconSpan); - } - - if (this.data.header) { - this.header.append(this.data.header); - } - - this.modal.append(this.header); - - if (this.data.content) { - this.contentContainer = document.createElement('div'); - this.contentContainer.classList.add('ps-checkout', 'content'); - this.contentContainer.append(this.data.content); - this.modal.append(this.contentContainer); - } - - this.footer = document.createElement('div'); - this.footer.classList.add('ps-checkout', 'footer'); - - this.cancelButton = document.createElement('button'); - this.cancelButton.innerHTML = this.data.cancelText; - this.cancelButton.classList.add('ps-checkout', 'btn', this.data.cancelType); - - this.cancelButton.addEventListener('click', (event) => { - event.preventDefault(); - this.data.onCancel(); - this.hide(); - }) - - this.confirmButton = document.createElement('button'); - this.confirmButton.innerHTML = this.data.confirmText; - this.confirmButton.classList.add('ps-checkout', 'btn', this.data.confirmType); - - this.confirmButton.addEventListener('click', (event) => { - event.preventDefault(); - this.data.onConfirm(); - this.hide(); - }) - - this.footer.append(this.cancelButton, this.confirmButton); - - this.modal.append(this.footer); - - this.overlay.append(this.modal); - this.data.parent.append(this.overlay); - - return this; - } - - show() { - this.overlay.classList.add('visible'); - document.body.style.overflow = 'hidden'; - } - - hide() { - this.overlay.classList.remove('visible'); - document.body.style.overflow = ''; - } -} diff --git a/_dev/js/front/src/components/common/payment-fields.component.js b/_dev/js/front/src/components/common/payment-fields.component.js deleted file mode 100644 index e6de875ab..000000000 --- a/_dev/js/front/src/components/common/payment-fields.component.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -/** - * @typedef PaymentFieldsComponentProps - * - * @param {string} fundingSource.name - * @param {*} fundingSource.mark - * - * @param {HTMLElement} HTMLElement - */ - -export class PaymentFieldsComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService' - }; - - created() { - this.data.name = this.props.fundingSource.name; - - this.data.HTMLElement = this.props.HTMLElement; - } - - render() { - const containerSelector = `.ps_checkout-payment-fields[data-funding-source=${this.data.name}]`; - - this.data.HTMLElement.classList.add('ps_checkout-payment-fields'); - this.data.HTMLElement.setAttribute('data-funding-source', this.data.name); - - const paymentFields = this.payPalService - .getPaymentFields(this.data.name); - - if (paymentFields) { - paymentFields.render(containerSelector); - } - - return this; - } -} diff --git a/_dev/js/front/src/components/common/payment-fields.component.spec.js b/_dev/js/front/src/components/common/payment-fields.component.spec.js deleted file mode 100644 index ec7fe4b4f..000000000 --- a/_dev/js/front/src/components/common/payment-fields.component.spec.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import {PaymentFieldsComponent} from "./payment-fields.component"; - -function buildDIContainerMock() { - return { - container: { - PsCheckoutConfig: { - customMark: { - bar: 'baz' - } - }, - PayPalService: { - getPaymentFields: jest.fn(), - sdk: { - paymentFields: { - isEligible: jest.fn() - } - }, - } - } - }; -} - -describe('src/components/common/payment-fields.component.spec.js', () => { - beforeEach(() => (document.body.innerHTML = `
`)); - afterEach(() => (document.body.innerHTML = '')); - - test('::render()', () => { - document.body.innerHTML = - '
' + - '
Foo
' + - '
' + - '
' + - '
' + - '
'; - - const HTMLElement = document.getElementById('pay-with-payment-option-foo-form'); - - const diContainer = buildDIContainerMock(); - const fundingSource = { - name: 'foo', - mark: { render: jest.fn() } - }; - - const component = new PaymentFieldsComponent(diContainer, { - fundingSource, - HTMLElement - }); - - expect(component.render()).toBe(component); - expect(HTMLElement.classList.contains('ps_checkout-payment-fields')).toBeTruthy(); - expect(HTMLElement.getAttribute('data-funding-source')).toBe('foo'); - }); -}); diff --git a/_dev/js/front/src/components/common/payment-method-logos.component.js b/_dev/js/front/src/components/common/payment-method-logos.component.js deleted file mode 100644 index 4943166a6..000000000 --- a/_dev/js/front/src/components/common/payment-method-logos.component.js +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -/** - * @typedef PaymentFieldsComponentProps - * - * @param {string} fundingSource.name - * @param {*} fundingSource.mark - * - * @param {HTMLElement} HTMLElement - */ - -export class PaymentMethodLogosComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - $: '$' - }; - - created() { - this.data.HTMLElement = this.props.HTMLElement; - } - - render() { - this.renderMark(); - - this.prestashopService.onUpdatedCart(() => { - return this.renderMark(); - }); - - this.prestashopService.onUpdatedProduct(() => { - return this.renderMark(); - }); - - return this; - } - - renderMark() { - let containerLogoIdentifier = `#ps_checkout-payment-method-logos-container`; - const containerLogoQuerySelector = this.querySelectorService.getPaymentMethodLogoContainer(this.props.placement); - let fundingSources = this.payPalService.getEligibleFundingSources(); - fundingSources = fundingSources.filter((fundingSource) => !fundingSource.name.includes('token')); - - if (containerLogoQuerySelector) { - const containerLogo = document.querySelector(containerLogoIdentifier); - - if (null === containerLogo) { - let containerLogoElement = this.createContainer(containerLogoIdentifier, containerLogoQuerySelector); - - fundingSources.forEach(fundingSource => { - if (this.hasCustomMark(fundingSource.name)) { - this.renderCustomMark(fundingSource.name, containerLogoElement); - } else { - fundingSource.mark.render(containerLogoElement); - } - }); - } - } - } - - createContainer(containerIdentifier, querySelector) { - const container = document.querySelector(containerIdentifier); - - if (null === container) { - let containerParentElement = document.createElement('div'); - containerParentElement.id = 'ps_checkout-payment-method-logo-block-container'; - - let titleImg = document.createElement('img'); - titleImg.id = 'ps_checkout-payment-method-logo-block-img'; - titleImg.setAttribute('alt', this.$('payment-method-logos.title')); - titleImg.setAttribute('src', this.config.imgTitlePaymentMethodLogos); - - let title = document.createElement('div'); - title.id = 'ps_checkout-payment-method-logo-block-title'; - title.innerText = this.$('payment-method-logos.title'); - title.prepend(titleImg); - containerParentElement.append(title); - - let containerLogoElement = document.createElement('div'); - containerLogoElement.id = containerIdentifier.slice(1); - - containerParentElement.append(containerLogoElement); - - querySelector.append(containerParentElement); - - return containerLogoElement; - } - - return container; - } - - hasCustomMark(fundingSource) { - return this.config.customMark[fundingSource]; - } - - renderCustomMark(fundingSource, containerQuerySelector) { - const src = this.config.customMark[fundingSource]; - let logoList = []; - let containerElement = document.createElement('div'); - - if (this.config.cardSupportedBrands && this.config.cardLogoBrands) { - this.config.cardSupportedBrands.forEach(brand => { - if (this.config.cardLogoBrands[brand]) { - let customMarkImg = document.createElement('img'); - customMarkImg.classList.add('cards-logo'); - customMarkImg.setAttribute('alt', brand); - customMarkImg.setAttribute('src', this.config.cardLogoBrands[brand]); - logoList.push(customMarkImg); - let space = document.createElement('span'); - space.classList.add('paypal-button-space'); - space.innerText = ' '; - logoList.push(space); - } - }); - } else { - let customMarkImg = document.createElement('img'); - customMarkImg.classList.add('cards-logo'); - customMarkImg.setAttribute('alt', fundingSource); - customMarkImg.setAttribute('src', src); - logoList.push(customMarkImg); - } - - logoList.forEach(customMarkImg => containerElement.append(customMarkImg)); - containerElement.classList.add('paypal-mark'); - containerQuerySelector.append(containerElement); - } -} diff --git a/_dev/js/front/src/components/common/payment-option.component.js b/_dev/js/front/src/components/common/payment-option.component.js deleted file mode 100644 index cc8488bca..000000000 --- a/_dev/js/front/src/components/common/payment-option.component.js +++ /dev/null @@ -1,270 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -import { MarkComponent } from './marker.component'; -import { SmartButtonComponent } from './smart-button.component'; -import { PaymentFieldsComponent } from './payment-fields.component'; -import { CardFieldsComponent } from './card-fields.component'; -import { PS_VERSION_1_6 } from '../../constants/ps-version.constants'; -import { PaymentTokenComponent } from './payment-token.component'; - -/** - * @typedef PaymentOptionComponentProps - * - * @param {string} fundingSource.name - * @param {*} fundingSource.mark - * - * @param {HTMLElement} HTMLElement - */ - -export class PaymentOptionComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - querySelectorService: 'QuerySelectorService', - prestashopService: 'PrestashopService', - $: '$' - }; - - created() { - this.data.name = this.props.fundingSource.name; - - this.data.HTMLElement = this.props.HTMLElement; - this.data.HTMLElementContainer = this.getContainer(); - this.data.HTMLElementLabel = this.getLabel(); - this.data.HTMLElementMark = this.props.HTMLElementMark || null; - - this.data.HTMLElementCardFields = - this.querySelectorService.getCardFieldsFormContainer(); - this.data.HTMLElementSmartButton = this.getSmartButton(); - this.data.HTMLElementPaymentFields = this.getPaymentFields(); - } - - getContainer() { - const wrapperId = `${this.data.HTMLElement.id}-container`; - return document.getElementById(wrapperId); - } - - getPaymentFields() { - const container = `pay-with-${this.data.HTMLElement.id}-form`; - const APM = [ - 'bancontact', - 'blik', - 'eps', - 'giropay', - 'ideal', - 'mybank', - 'p24', - 'sofort' - ]; - - const APMEligible = - typeof this.payPalService.sdk.PaymentFields?.isEligible === 'function' - ? this.payPalService.sdk.PaymentFields.isEligible(this.data.name) - : APM.includes(this.data.name); - - return APMEligible && document.getElementById(container); - } - - getPaymentForm() { - const container = `pay-with-${this.data.HTMLElement.id}-form`; - return document.getElementById(container); - } - - getFormData(form) { - if (form) { - const name = form.id.startsWith('ps_checkout-vault-token-form-token') - ? form.id.replace('ps_checkout-vault-token-form-', '') - : ''; - - const formData = new FormData(form); - return { - fundingSource: formData.get( - `ps_checkout-funding-source-${name}` - ), - vaultId: formData.get(`ps_checkout-vault-id-${name}`), - favorite: - formData.get(`ps_checkout-favorite-payment-${name}`) === '1' - }; - } - return {}; - } - - getLabel() { - const translationKey = `funding-source.name.${this.data.name}`; - const label = - this.$(translationKey) !== undefined - ? this.$(translationKey) - : this.$('funding-source.name.default'); - - let element = Array.prototype.slice - .call(this.data.HTMLElementContainer.querySelectorAll('*')) - .find( - (item) => - (this.prestashopService.getVersion() === PS_VERSION_1_6 - ? item.innerHTML.trim() - : item.innerText.trim()) === label.trim() - ); - - if (!element) { - console.error('HTMLElement label "' + label.trim() + '" not found.'); - } - - return element; - } - - getSmartButton() { - const smartButtonSelector = `.ps_checkout-button[data-funding-source=${this.data.name}]`; - return document.querySelector(smartButtonSelector); - } - - onLabelClick(listener) { - this.data.HTMLElementLabel.addEventListener('click', (event) => { - event.preventDefault(); - listener(this, event); - }); - } - - renderWrapper() { - this.data.HTMLElementContainer.classList.add('ps_checkout-payment-option'); - this.data.HTMLElementContainer.style.display = ''; - } - - renderMark() { - if (!this.data.HTMLElementLabel) { - return; - } - - if (!this.data.HTMLElementMarker) { - this.data.HTMLElementMarker = document.createElement('div'); - this.data.HTMLElementMarker.style.display = 'inline-block'; - - if (this.props.markPosition === 'before') { - this.data.HTMLElementLabel.prepend(this.data.HTMLElementMarker); - } else { - this.data.HTMLElementLabel.append(this.data.HTMLElementMarker); - } - } - - this.children.Marker = this.marker = new MarkComponent(this.app, { - fundingSource: this.props.fundingSource, - - HTMLElement: this.data.HTMLElementMarker - }).render(); - } - - renderPaymentFields() { - if (!this.data.HTMLElementPaymentFields) { - return; - } - - this.children.PaymentFields = this.PaymentFields = - new PaymentFieldsComponent(this.app, { - fundingSource: this.props.fundingSource, - - HTMLElement: this.data.HTMLElementPaymentFields - }).render(); - } - - render() { - if ( - this.data.HTMLElementContainer.classList.contains( - 'ps_checkout-payment-option' - ) - ) { - // Render already done - return; - } - - this.renderWrapper(); - this.renderMark(); - this.renderPaymentFields(); - - const isCardFieldsEligible = this.payPalService.isCardFieldsEligible(); - // Check if all fields required for cardFields are present in DOM - const isCardFieldsAvailable = - this.data.name === 'card' && - this.config.hostedFieldsEnabled && - this.querySelectorService.getCardFieldsNameInputContainer() && - this.querySelectorService.getCardFieldsNumberInputContainer() && - this.querySelectorService.getCardFieldsExpiryInputContainer() && - this.querySelectorService.getCardFieldsCvvInputContainer(); - - if ( - this.data.HTMLElementCardFields && - (!isCardFieldsEligible || !isCardFieldsAvailable) - ) { - this.data.HTMLElementCardFields.style.display = 'none'; - } - - const paymentOptionForm = this.getPaymentForm(); - const formData = this.getFormData(paymentOptionForm.getElementsByTagName('form')[0]); - const { vaultId } = formData - - if ( - this.props.fundingSource.name.includes('token') || - (this.props.fundingSource.name.includes('paypal') && vaultId) - ) { - this.children.paymentToken = new PaymentTokenComponent(this.app, { - fundingSource: this.props.fundingSource, - HTMLElement: this.data.HTMLElementSmartButton, - HTMLElementRadio: this.data.HTMLElement, - HTMLElementContainer: this.data.HTMLElementContainer, - HTMLElementForm: paymentOptionForm, - HTMLElementFormData: formData, - HTMLElementLabel: this.data.HTMLElementLabel - }).render(); - } else if ( - this.data.HTMLElementCardFields && - isCardFieldsEligible && - isCardFieldsAvailable - ) { - this.data.HTMLElementCardFields.style.display = ''; - this.children.cardFields = new CardFieldsComponent(this.app, { - fundingSource: this.props.fundingSource, - HTMLElement: this.data.HTMLElementCardFields - }).render(); - } else { - this.children.smartButton = new SmartButtonComponent(this.app, { - fundingSource: this.props.fundingSource, - - HTMLElement: this.data.HTMLElementSmartButton - }).render(); - } - - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payment-option-active', { - detail: { - fundingSource: this.data.name, - HTMLElement: this.data.HTMLElement, - HTMLElementContainer: this.data.HTMLElementContainer, - HTMLElementBinary: - this.data.HTMLElementCardFields && - isCardFieldsEligible && - isCardFieldsAvailable - ? this.children.cardFields.data.HTMLElementButton.parentElement - : this.data.HTMLElementSmartButton - } - }) - ); - - return this; - } -} diff --git a/_dev/js/front/src/components/common/payment-option.component.spec.js b/_dev/js/front/src/components/common/payment-option.component.spec.js deleted file mode 100644 index 7beb4129e..000000000 --- a/_dev/js/front/src/components/common/payment-option.component.spec.js +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PsCheckoutConfig } from '../../config/ps-checkout.config'; - -import { HostedFieldsComponentMock } from '../../../test/mocks/components/common/hosted-fields.component.mock'; -import { MarkComponentMock } from '../../../test/mocks/components/common/mark.component.mock'; -import { SmartButtonComponentMock } from '../../../test/mocks/components/common/smart-button.component.mock'; -import { PaymentFieldsComponentMock } from '../../../test/mocks/components/common/payment-fields.component.mock'; - -function buildDIContainerMock() { - return { - container: { - PsCheckoutConfig: { - ...PsCheckoutConfig - }, - PayPalService: { - getPaymentFields: jest.fn(), - sdk: { - paymentFields: { - isEligible: jest.fn() - } - }, - }, - $: jest.fn().mockImplementation(key => { - return ( - { - 'funding-source.name.foo': 'Foo', - 'funding-source.name.default': 'Default' - }[key] || '' - ); - }) - } - }; -} - -describe('src/components/common/payment-option.component.spec.js', () => { - const markComponentMock = MarkComponentMock; - const smartButtonComponentMock = SmartButtonComponentMock; - const hostedFieldsComponentMock = HostedFieldsComponentMock; - const paymentFieldsComponentMock = PaymentFieldsComponentMock; - - let PaymentOptionComponent; - - beforeEach(() => { - markComponentMock.mockClear(); - markComponentMock.render.mockClear(); - - smartButtonComponentMock.mockClear(); - smartButtonComponentMock.render.mockClear(); - - hostedFieldsComponentMock.mockClear(); - hostedFieldsComponentMock.render.mockClear(); - - paymentFieldsComponentMock.mockClear(); - paymentFieldsComponentMock.render.mockClear(); - - jest - .doMock('./marker.component', () => ({ - MarkComponent: markComponentMock - })) - .doMock('./smart-button.component', () => ({ - SmartButtonComponent: smartButtonComponentMock - })) - .doMock('./payment-fields.component', () => ({ - PaymentFieldsComponent: paymentFieldsComponentMock - })) - .doMock('./hosted-fields.component', () => ({ - HostedFieldsComponent: hostedFieldsComponentMock - })); - - PaymentOptionComponent = require('./payment-option.component') - .PaymentOptionComponent; - }); - - afterEach(() => { - jest.clearAllMocks(); - - return (document.body.innerHTML = ''); - }); - - test('::render() with SmartButton and translatable label', () => { - document.body.innerHTML = - '
' + - '
Foo
' + - '
' + - '
' + - '
'; - - const HTMLElement = document.getElementById('foo-payment-option'); - const fundingSource = { - name: 'foo' - }; - - const diContainer = buildDIContainerMock(); - const paymentOptionComponent = new PaymentOptionComponent(diContainer, { - HTMLElement, - fundingSource - }); - - const labelListener = jest.fn(); - paymentOptionComponent.onLabelClick(labelListener); - - expect(paymentOptionComponent.render()).toBe(paymentOptionComponent); - expect(markComponentMock.render).toHaveBeenCalledTimes(1); - expect(smartButtonComponentMock.render).toHaveBeenCalledTimes(1); - expect(hostedFieldsComponentMock.render).not.toHaveBeenCalled(); - expect(diContainer.container.$).toHaveBeenCalledTimes(2); - - expect(labelListener).not.toHaveBeenCalled(); - document.getElementById('foo-label').click(); - expect(labelListener).toHaveBeenCalledTimes(1); - }); -}); diff --git a/_dev/js/front/src/components/common/payment-options-loader.component.js b/_dev/js/front/src/components/common/payment-options-loader.component.js deleted file mode 100644 index 773dbf962..000000000 --- a/_dev/js/front/src/components/common/payment-options-loader.component.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class PaymentOptionsLoaderComponent extends BaseComponent { - static Inject = { - querySelectorService: 'QuerySelectorService' - }; - - created() { - this.data.loader = this.querySelectorService.getPaymentOptionsLoader(); - } - - hide() { - this.data.loader && (this.data.loader.style.display = 'none'); - } -} diff --git a/_dev/js/front/src/components/common/payment-options-loader.component.spec.js b/_dev/js/front/src/components/common/payment-options-loader.component.spec.js deleted file mode 100644 index 671aa8a01..000000000 --- a/_dev/js/front/src/components/common/payment-options-loader.component.spec.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PaymentOptionsLoaderComponent } from './payment-options-loader.component'; - -function buildDIContainerMock() { - return { - container: { - QuerySelectorService: { - getPaymentOptionsLoader: jest.fn() - } - } - }; -} - -describe('src/components/common/payment-options-loader.component.spec.js', () => { - test('::render() without HTMLElement', () => { - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getPaymentOptionsLoader.mockReturnValueOnce( - undefined - ); - - const component = new PaymentOptionsLoaderComponent(diContainer); - expect(component.render()).toBe(component); - }); - - test('::render()', () => { - document.body.innerHTML = '
'; - - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getPaymentOptionsLoader.mockReturnValueOnce( - document.getElementById('foo') - ); - - const component = new PaymentOptionsLoaderComponent(diContainer); - expect(component.render()).toBe(component); - - document.body.innerHTML = ''; - }); - - test('::hide() without HTMLElement', () => { - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getPaymentOptionsLoader.mockReturnValueOnce( - undefined - ); - - const component = new PaymentOptionsLoaderComponent(diContainer); - expect(component.render()).toBe(component); - expect(() => component.hide()).not.toThrow(); - }); - - test('::hide()', () => { - document.body.innerHTML = '
'; - const loader = document.getElementById('foo'); - - const diContainer = buildDIContainerMock(); - diContainer.container.QuerySelectorService.getPaymentOptionsLoader.mockReturnValueOnce( - loader - ); - - const component = new PaymentOptionsLoaderComponent(diContainer); - expect(component.render()).toBe(component); - expect(() => component.hide()).not.toThrow(); - expect(loader.style.display).toBe('none'); - }); -}); diff --git a/_dev/js/front/src/components/common/payment-token.component.js b/_dev/js/front/src/components/common/payment-token.component.js deleted file mode 100644 index 3800b2a72..000000000 --- a/_dev/js/front/src/components/common/payment-token.component.js +++ /dev/null @@ -1,423 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { ModalComponent } from './modal.component'; -import { LoaderComponent } from './loader.component'; - -/** - * @typedef PaymentTokenComponentProps - * - * @param {string} fundingSource.name - * - * @param {HTMLElement} [HTMLElement] - * @param {HTMLElement} HTMLElementWrapper - */ - -export class PaymentTokenComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - querySelectorService: 'QuerySelectorService', - $: '$' - }; - - created() { - this.data.name = this.props.fundingSource.name; - this.data.orderId = this.payPalService.getOrderId(); - - this.data.HTMLElement = this.props.HTMLElement; - - this.data.HTMLElementLabel = this.props.HTMLElementLabel; - this.data.HTMLElementRadio = this.props.HTMLElementRadio; - this.data.HTMLElementContainer = this.props.HTMLElementContainer; - this.data.HTMLElementForm = this.props.HTMLElementForm; - this.data.HTMLElementFormData = this.props.HTMLElementFormData; - - this.data.conditions = this.app.root.children.conditionsCheckbox; - this.data.loader = this.app.root.children.loader; - this.data.notification = this.app.root.children.notification; - this.data.HTMLElementBaseButton = - this.querySelectorService.getBasePaymentConfirmation(); - this.data.HTMLElementButton = null; - this.data.HTMLElementButtonWrapper = this.getButtonWrapper(); - this.data.HTMLElementDeleteButton = this.getDeleteButton(); - - this.data.disabled = false; - this.data.modal = null; - } - - showModal() { - if (!this.data.modal) { - const modalContent = document.createElement('div'); - const line1 = document.createElement('p'); - line1.innerText = this.$('checkout.payment.token.delete.modal.content'); - const paymentLabel = document.createElement('p'); - paymentLabel.innerText = this.getPaymentLabel(); - modalContent.append(line1, paymentLabel); - - const myThis = this; - - this.data.modal = new ModalComponent(this.app, { - icon: 'delete_forever_fill', - iconType: 'danger', - header: this.$('checkout.payment.token.delete.modal.header'), - content: modalContent, - confirmText: this.$( - 'checkout.payment.token.delete.modal.confirm-button' - ), - confirmType: 'danger', - onClose: () => { - if (myThis.data.HTMLElementButton) { - myThis.data.HTMLElementButton.removeAttribute('disabled'); - } - }, - onCancel: () => { - if (myThis.data.HTMLElementButton) { - myThis.data.HTMLElementButton.removeAttribute('disabled'); - } - }, - onConfirm: () => { - myThis.onDeleteConfirm(); - } - }).render(); - } - this.data.modal.show(); - } - - onDeleteConfirm() { - const { vaultId, fundingSource } = this.data.HTMLElementFormData; - const loader = new LoaderComponent(this.app, { - text: this.$('checkout.payment.loader.processing-request') - }).render(); - - loader.show(); - this.psCheckoutApi - .postDeleteVaultedToken({ vaultId }) - .then(() => { - this.data.disabled = true; - this.data.HTMLElementRadio.checked = false; - this.data.HTMLElementContainer.remove(); - this.data.HTMLElementForm.remove(); - if (fundingSource === 'paypal') { - window.location.reload(); - } else { - loader.destroy(); - } - }) - .catch((error) => { - loader.destroy(); - this.handleError(error); - }); - } - - getDeleteButton() { - const button = document.querySelector(`#delete-token-${this.data.HTMLElementFormData.vaultId}`); - - if (button) { - button.addEventListener('click', (event) => { - event.preventDefault(); - if (this.data.HTMLElementButton) { - this.data.HTMLElementButton.setAttribute('disabled', ''); - } else { - this.data.HTMLElement.setAttribute('disabled', ''); - } - - this.showModal(); - }); - } - - return button; - } - - getButtonWrapper() { - const buttonWrapper = `.ps_checkout-button[data-funding-source=${this.data.name}]`; - return document.querySelector(buttonWrapper); - } - - handleError(error) { - this.data.loader.hide(); - this.data.notification.showError(error.message); - - if (this.data.HTMLElementButton) { - this.data.HTMLElementButton.removeAttribute('disabled'); - } - - let errorMessage = error; - - if (error instanceof Error) { - if (error.message) { - errorMessage = error.message; - - if ( - error.message.includes('CURRENCY_NOT_SUPPORTED_BY_PAYMENT_SOURCE') - ) { - errorMessage = - 'Provided currency is not supported by the selected payment method.'; - } else if ( - error.message.includes('COUNTRY_NOT_SUPPORTED_BY_PAYMENT_SOURCE') - ) { - errorMessage = - 'Provided country is not supported by the selected payment method.'; - } else if (error.message.includes('Detected popup close')) { - errorMessage = - 'The payment failed because the payment window has been closed before the end of the payment process.'; - } - } - } - - return errorMessage; - } - - getPaymentLabel() { - const form = document.querySelector( - `form#ps_checkout-vault-token-form-${this.data.name}` - ); - if (form) { - const formData = new FormData(form); - return formData.get(`ps_checkout-vault-label-${this.data.name}`); - } - return ''; - } - - getVaultFormData() { - const form = document.querySelector( - `form#ps_checkout-vault-token-form-${this.data.name}` - ); - if (form) { - const formData = new FormData(form); - return { - fundingSource: formData.get( - `ps_checkout-funding-source-${this.data.name}` - ), - vaultId: formData.get(`ps_checkout-vault-id-${this.data.name}`), - favorite: - formData.get(`ps_checkout-favorite-payment-${this.data.name}`) === '1' - }; - } - return {}; - } - - createOrder() { - this.psCheckoutApi - .postCreateOrder(this.data.HTMLElementFormData) - .then((data) => { - this.data.orderId = data; - this.redirectToPaymentPage(); - }) - .catch((error) => this.handleError(error)); - } - - redirectToPaymentPage() { - const confirmationUrl = new URL(this.config.paymentUrl); - confirmationUrl.searchParams.append('orderID', this.data.orderId); - window.location.href = confirmationUrl.toString(); - } - - renderButton() { - this.data.HTMLElementButton = - this.data.HTMLElementBaseButton.cloneNode(true); - - this.data.HTMLElementButtonWrapper.append(this.data.HTMLElementButton); - this.data.HTMLElementButton.classList.remove('disabled'); - this.data.HTMLElementButton.style.display = ''; - this.data.HTMLElementButton.disabled = !this.isSubmittable(); - - this.data.conditions && - this.data.conditions.onChange(() => { - // In some PS versions, the handler fails to disable the button because of the timing. - setTimeout(() => { - this.data.HTMLElementButton.disabled = !this.isSubmittable(); - }, 0); - }); - - this.data.HTMLElementButton.addEventListener('click', (event) => { - event.preventDefault(); - - this.data.loader.show(); - this.data.HTMLElementButton.setAttribute('disabled', ''); - - this.createOrder(); - }); - } - - renderFavoriteImg() { - if ( - this.data.HTMLElementLabel && - !document.getElementById(`ps_checkout-favorite-payment-${this.data.name}`) - ) { - const img = document.createElement('img'); - img.classList.add('ps-checkout', 'icon-favorite'); - img.style.display = 'inline-block'; - img.src = this.config.iconPath + 'favorite_fill.svg'; - - this.data.HTMLElementLabel.append(img); - } - } - - isSubmittable() { - return ( - (this.data.conditions ? this.data.conditions.isChecked() : false) && - !this.data.disabled - ); - } - - renderPayPalButton() { - const buttonSelector = `.ps_checkout-button[data-funding-source=${this.data.name}]`; - - this.data.HTMLElement.classList.add('ps_checkout-button'); - this.data.HTMLElement.setAttribute('data-funding-source', this.data.name); - - return this.payPalService - .getButtonPayment('paypal', { - onInit: (data, actions) => { - if (!this.data.conditions) { - actions.enable(); - return; - } - - if (this.data.conditions.isChecked()) { - this.data.notification.hideConditions(); - actions.enable(); - } else { - this.data.notification.showConditions(); - actions.disable(); - } - - this.data.conditions.onChange(() => { - if (this.data.conditions.isChecked()) { - this.data.notification.hideConditions(); - actions.enable(); - } else { - this.data.notification.showConditions(); - actions.disable(); - } - }); - }, - onClick: (data, actions) => { - if (this.data.conditions && !this.data.conditions.isChecked()) { - this.data.notification.hideCancelled(); - this.data.notification.hideError(); - this.data.notification.showConditions(); - - return actions.reject(); - } - - if (this.data.name !== 'card') { - this.data.loader.show(); - } - - return this.psCheckoutApi - .postCheckCartOrder( - { - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - orderID: this.payPalService.getOrderId() - }, - actions - ) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - return actions.reject(); - }); - }, - onError: (error) => { - let errorMessage = this.handleError(error); - console.error(error); - this.data.loader.hide(); - this.data.notification.showError(errorMessage); - - return this.psCheckoutApi - .postCancelOrder({ - orderID: this.data.orderId, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - reason: 'checkout_error', - error: errorMessage - }) - .catch((error) => console.error(error)); - }, - onApprove: (data, actions) => { - this.data.loader.show(); - return this.psCheckoutApi - .postValidateOrder( - { - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active - }, - actions - ) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - }); - }, - onCancel: (data) => { - this.data.loader.hide(); - this.data.notification.showCanceled(); - - return this.psCheckoutApi - .postCancelOrder({ - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - reason: 'checkout_cancelled' - }) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - }); - }, - createOrder: (data) => { - return this.psCheckoutApi - .postCreateOrder({ - ...this.data.HTMLElementFormData, - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active - }) - .then((data) => { - this.data.orderId = data; - return data; - }) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError( - `${error.message} ${error.name}` - ); - }); - } - }) - .render(buttonSelector); - } - - render() { - const { fundingSource } = this.data.HTMLElementFormData; - if (fundingSource === 'paypal') { - this.renderPayPalButton(); - } else { - this.renderButton(); - // this.renderFavoriteImg(); - } - return this; - } -} diff --git a/_dev/js/front/src/components/common/smart-button.component.js b/_dev/js/front/src/components/common/smart-button.component.js deleted file mode 100644 index 715bbbe50..000000000 --- a/_dev/js/front/src/components/common/smart-button.component.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -/** - * @typedef SmartButtonComponentProps - * - * @param {string} fundingSource.name - * @param {*} fundingSource.mark - * - * @param {HTMLElement} [HTMLElement] - * @param {HTMLElement} HTMLElementWrapper - */ - -export class SmartButtonComponent extends BaseComponent { - static Inject = { - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi' - }; - - created() { - this.data.name = this.props.fundingSource.name; - this.data.orderId = null; - - this.data.HTMLElement = this.props.HTMLElement; - - this.data.conditions = this.app.root.children.conditionsCheckbox; - this.data.loader = this.app.root.children.loader; - this.data.notification = this.app.root.children.notification; - } - - renderPayPalButton() { - const buttonSelector = `.ps_checkout-button[data-funding-source=${this.data.name}]`; - - this.data.HTMLElement.classList.add('ps_checkout-button'); - this.data.HTMLElement.setAttribute('data-funding-source', this.data.name); - - return this.payPalService - .getButtonPayment(this.data.name, { - onInit: (data, actions) => { - if (!this.data.conditions) { - actions.enable(); - return; - } - - if (this.data.conditions.isChecked()) { - this.data.notification.hideConditions(); - actions.enable(); - } else { - this.data.notification.showConditions(); - actions.disable(); - } - - this.data.conditions.onChange(() => { - if (this.data.conditions.isChecked()) { - this.data.notification.hideConditions(); - actions.enable(); - } else { - this.data.notification.showConditions(); - actions.disable(); - } - }); - }, - onClick: (data, actions) => { - if (this.data.conditions && !this.data.conditions.isChecked()) { - this.data.notification.hideCancelled(); - this.data.notification.hideError(); - this.data.notification.showConditions(); - - return actions.reject(); - } - - if (this.data.name !== 'card') { - this.data.loader.show(); - } - - return this.psCheckoutApi - .postCheckCartOrder( - { - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - orderID: this.payPalService.getOrderId() - }, - actions - ) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - return actions.reject(); - }); - }, - onError: (error) => { - let errorMessage = this.handleError(error); - console.error(error); - this.data.loader.hide(); - this.data.notification.showError(errorMessage); - - return this.psCheckoutApi - .postCancelOrder({ - orderID: this.data.orderId, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - reason: 'checkout_error', - error: errorMessage - }) - .catch((error) => console.error(error)); - }, - onApprove: (data, actions) => { - this.data.loader.show(); - return this.psCheckoutApi - .postValidateOrder( - { - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active - }, - actions - ) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - }); - }, - onCancel: (data) => { - this.data.loader.hide(); - this.data.notification.showCanceled(); - - return this.psCheckoutApi - .postCancelOrder({ - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active, - reason: 'checkout_cancelled' - }) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError(error.message); - }); - }, - createOrder: (data) => { - return this.psCheckoutApi - .postCreateOrder({ - ...this.getVaultFormData(), - ...data, - fundingSource: this.data.name, - isExpressCheckout: this.config.expressCheckout.active - }) - .then((data) => { - this.data.orderId = data; - return data; - }) - .catch((error) => { - this.data.loader.hide(); - this.data.notification.showError( - `${error.message} ${error.name}` - ); - }); - } - }) - .render(buttonSelector); - } - - getVaultFormData() { - const form = document.querySelector(`form#ps_checkout-vault-payment-form-${this.data.name}`); - if (form) { - const formData = new FormData(form); - return { - vault: formData.get(`ps_checkout-vault-payment-${this.data.name}`) === '1', - favorite: formData.get(`ps_checkout-favorite-payment-${this.data.name}`) === '1' - }; - - } - return {}; - } - - handleError(error) { - let errorMessage = error; - - if (error instanceof Error) { - if (error.message) { - errorMessage = error.message; - - if ( - error.message.includes('CURRENCY_NOT_SUPPORTED_BY_PAYMENT_SOURCE') - ) { - errorMessage = - 'Provided currency is not supported by the selected payment method.'; - } else if ( - error.message.includes('COUNTRY_NOT_SUPPORTED_BY_PAYMENT_SOURCE') - ) { - errorMessage = - 'Provided country is not supported by the selected payment method.'; - } else if (error.message.includes('Detected popup close')) { - errorMessage = - 'The payment failed because the payment window has been closed before the end of the payment process.'; - } - } - } - - return errorMessage; - } - - render() { - this.renderPayPalButton(); - return this; - } -} diff --git a/_dev/js/front/src/components/common/smart-button.component.spec.js b/_dev/js/front/src/components/common/smart-button.component.spec.js deleted file mode 100644 index de6cb3fe1..000000000 --- a/_dev/js/front/src/components/common/smart-button.component.spec.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PsCheckoutConfig } from '../../config/ps-checkout.config'; -import { PayPalServiceMock } from '../../../test/mocks/service/paypal.service'; -import { PsCheckoutApiMock } from '../../../test/mocks/api/ps-checkout.api'; -import { PaymentOptionsLoaderComponent } from './payment-options-loader.component'; -import { SmartButtonComponent } from './smart-button.component'; - -function buildDIContainerMock() { - return { - root: { - children: { - conditionsCheckbox: jest.fn() - } - }, - container: { - PsCheckoutConfig: { - ...PsCheckoutConfig - }, - PayPalService: PayPalServiceMock, - PsCheckoutApi: PsCheckoutApiMock - } - }; -} - -describe('src/components/common/smart-button.component.spec.js', () => { - afterEach(() => (document.body.innerHTML = '')); - - test('::render()', () => { - document.body.innerHTML = - '
'; - - const HTMLElement = document.querySelector('.ps_checkout-button'); - const fundingSource = { - name: 'foo' - }; - - const diContainer = buildDIContainerMock(); - diContainer.container.PayPalService.getButtonPayment.mockImplementationOnce( - () => { - return diContainer.container.PayPalService; - } - ); - - const smartButtonComponent = new SmartButtonComponent(diContainer, { - HTMLElement, - fundingSource - }); - expect(smartButtonComponent.render()).toBe(smartButtonComponent); - expect(diContainer.container.PayPalService.render).toHaveBeenCalledWith( - `.ps_checkout-button[data-funding-source=${fundingSource.name}]` - ); - }); - - // TODO: Test listeners -}); diff --git a/_dev/js/front/src/components/ps-checkout-express.component/index.js b/_dev/js/front/src/components/ps-checkout-express.component/index.js deleted file mode 100644 index 3f596bacc..000000000 --- a/_dev/js/front/src/components/ps-checkout-express.component/index.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PsCheckoutExpressPs1_6Component } from './ps-checkout-express-ps1_6.component'; -import { PsCheckoutExpressPs1_7Component } from './ps-checkout-express-ps1_7.component'; - -export class PsCheckoutExpressComponent extends BaseComponent { - static Inject = { - prestashopService: 'PrestashopService' - }; - - constructor(app, props) { - super(app, props); - - this.instance = new { - [PS_VERSION_1_6]: PsCheckoutExpressPs1_6Component, - [PS_VERSION_1_7]: PsCheckoutExpressPs1_7Component - }[this.prestashopService.getVersion()](app, props); - } - - render() { - return this.instance.render(); - } -} diff --git a/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_6.component.js b/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_6.component.js deleted file mode 100644 index 9029ff053..000000000 --- a/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_6.component.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -import { ExpressButtonCartComponent } from '../1_6/express-button-cart.component'; -import { ExpressButtonCheckoutComponent } from '../1_6/express-button-checkout.component'; -import { ExpressButtonProductComponent } from '../1_6/express-button-product.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PsCheckoutExpressPs1_6Component extends BaseComponent { - static ID = 0; - - static Inject = { - config: 'PsCheckoutConfig', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi' - }; - - renderExpressCheckoutCustom() { - this.props.HTMLElement.classList.add('ps_checkout-express-button'); - this.props.HTMLElement.setAttribute( - 'express-button-id', - PsCheckoutExpressPs1_6Component.ID - ); - - this.children.expressButton = new ExpressCheckoutButtonComponent(this.app, { - querySelector: `.ps_checkout-express-button[express-button-id="${PsCheckoutExpressPs1_6Component.ID++}"]`, - createOrder: (data) => - this.psCheckoutApi.postCreateOrder({ - ...(this.props.productData || data), - fundingSource: 'paypal', - isExpressCheckout: true - }) - }).render(); - } - - renderExpressCheckout() { - if (this.props.HTMLElement) { - this.renderExpressCheckoutCustom(); - return; - } - - if (this.prestashopService.isCartPage()) { - if (!this.config.expressCheckout.enabled.cart) return this; - if (!window.ps_checkoutCartProductCount) return this; - - this.children.expressButton = new ExpressButtonCartComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isOrderPersonalInformationStepPage()) { - if (!this.config.expressCheckout.enabled.order) return this; - if (!window.ps_checkoutCartProductCount) return this; - this.children.expressButton = new ExpressButtonCheckoutComponent( - this.app - ).render(); - - return this; - } - - if ( - this.prestashopService.isProductPage() && - !this.prestashopService.isIframeProductPage() - ) { - if (!this.config.expressCheckout.enabled.product) return; - if ( - this.children.expressButton && - this.children.expressButton.checkoutExpressButton && - this.children.expressButton.checkoutExpressButton.parentNode - ) - return; - - this.children.expressButton = new ExpressButtonProductComponent( - this.app - ).render(); - - return this; - } - } - - render() { - this.renderExpressCheckout(); - - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_7.component.js b/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_7.component.js deleted file mode 100644 index a3e87f9e7..000000000 --- a/_dev/js/front/src/components/ps-checkout-express.component/ps-checkout-express-ps1_7.component.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -import { ExpressButtonCartComponent } from '../1_7/express-button-cart.component'; -import { ExpressButtonCheckoutComponent } from '../1_7/express-button-checkout.component'; -import { ExpressButtonProductComponent } from '../1_7/express-button-product.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PsCheckoutExpressPs1_7Component extends BaseComponent { - static ID = 0; - - static Inject = { - config: 'PsCheckoutConfig', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi' - }; - - renderExpressCheckoutCustom() { - this.props.HTMLElement.classList.add('ps_checkout-express-button'); - this.props.HTMLElement.setAttribute( - 'express-button-id', - PsCheckoutExpressPs1_7Component.ID - ); - - this.children.expressButton = new ExpressCheckoutButtonComponent(this.app, { - querySelector: `.ps_checkout-express-button[express-button-id="${PsCheckoutExpressPs1_7Component.ID++}"]`, - createOrder: (data) => - this.psCheckoutApi.postCreateOrder({ - ...(this.props.productData || data), - fundingSource: 'paypal', - isExpressCheckout: true - }) - }).render(); - } - - renderExpressCheckout() { - if (this.props.HTMLElement) { - this.renderExpressCheckoutCustom(); - return; - } - - if (this.prestashopService.isCartPage()) { - if (!this.config.expressCheckout.enabled.cart) return this; - if (document.body.classList.contains('cart-empty')) return this; - - this.children.expressButton = new ExpressButtonCartComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isOrderPersonalInformationStepPage()) { - if (!this.config.expressCheckout.enabled.order) return this; - this.children.expressButton = new ExpressButtonCheckoutComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isProductPage()) { - if (!this.config.expressCheckout.enabled.product) return; - - if ( - this.children.expressButton && - this.children.expressButton.checkoutExpressButton && - this.children.expressButton.checkoutExpressButton.parentNode - ) - return; - - this.children.expressButton = new ExpressButtonProductComponent( - this.app - ).render(); - - return this; - } - } - - render() { - this.renderExpressCheckout(); - this.prestashopService.onUpdatedCart(() => { - return this.renderExpressCheckout(); - }); - - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/index.js b/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/index.js deleted file mode 100644 index 8e70a3b36..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/index.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PayLaterBannerPs1_6Component } from './pay-later-banner-ps1_6.component'; -import { PayLaterBannerPs1_7Component } from './pay-later-banner-ps1_7.component'; - -export class PayLaterBannerComponent extends BaseComponent { - - static Inject = { - prestashopService: 'PrestashopService', - querySelectorService: 'QuerySelectorService', - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - constructor(app, props) { - super(app, props); - - this.instance = new { - [PS_VERSION_1_6]: PayLaterBannerPs1_6Component, - [PS_VERSION_1_7]: PayLaterBannerPs1_7Component - }[this.prestashopService.getVersion()](app, props); - } - - onRender(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferBannerOnRender', args) - ); - } - - onClick(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferBannerOnClick', args) - ); - } - - onApply(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferBannerOnApply', args) - ); - } - - getContainerIdentifier(placement) { - return `#ps_checkout-paypal-pay-later-banner-${placement}`; - } - - renderPayLaterOfferBanner() { - let containerIdentifier = this.getContainerIdentifier(this.props.placement); - let amount = 'product' === this.props.placement ? this.prestashopService.getProductPrice() : this.prestashopService.getCartAmount(); - let containerQuerySelector = this.querySelectorService.getPayLaterOfferBannerContainerSelector(this.props.placement); - - if (null === containerQuerySelector) { - return; - } - - this.instance.createContainer(containerIdentifier, containerQuerySelector); - - return this.payPalService - .getPayLaterOfferBanner(this.props.placement, amount, { - onRender: (...args) => this.onRender(...args), - onClick: (...args) => this.onClick(...args), - onApply: (...args) => this.onApply(...args) - }) - .render(containerIdentifier); - } - - render() { - this.renderPayLaterOfferBanner(); - this.prestashopService.onUpdatedCart(() => { - return this.renderPayLaterOfferBanner(); - }); - this.prestashopService.onUpdatedProduct(() => { - return this.renderPayLaterOfferBanner(); - }); - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_6.component.js b/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_6.component.js deleted file mode 100644 index a0f9ce875..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_6.component.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class PayLaterBannerPs1_6Component extends BaseComponent { - createContainer(containerIdentifier, querySelector) { - if (null === document.querySelector(containerIdentifier)) { - let containerElement = document.createElement('div'); - containerElement.id = containerIdentifier.slice(1); - containerElement.classList.add('container', 'paypal-pay-later-banner'); - querySelector.append(containerElement); - } - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_7.component.js b/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_7.component.js deleted file mode 100644 index addc39d32..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-banner.component/pay-later-banner-ps1_7.component.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class PayLaterBannerPs1_7Component extends BaseComponent { - createContainer(containerIdentifier, querySelector) { - if (null === document.querySelector(containerIdentifier)) { - let containerElement = document.createElement('div'); - containerElement.id = containerIdentifier.slice(1); - containerElement.classList.add('paypal-pay-later-banner'); - querySelector.append(containerElement); - } - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/index.js b/_dev/js/front/src/components/ps-checkout-pay-later-message.component/index.js deleted file mode 100644 index 845956cba..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/index.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PayLaterMessagePs1_6Component } from './pay-later-message-ps1_6.component'; -import { PayLaterMessagePs1_7Component } from './pay-later-message-ps1_7.component'; - -export class PayLaterMessageComponent extends BaseComponent { - static Inject = { - prestashopService: 'PrestashopService', - querySelectorService: 'QuerySelectorService', - config: 'PsCheckoutConfig', - payPalService: 'PayPalService', - psCheckoutApi: 'PsCheckoutApi', - $: '$' - }; - - constructor(app, props) { - super(app, props); - - this.instance = new { - [PS_VERSION_1_6]: PayLaterMessagePs1_6Component, - [PS_VERSION_1_7]: PayLaterMessagePs1_7Component - }[this.prestashopService.getVersion()](app, props); - } - - onRender(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferMessageOnRender', args) - ); - } - - onClick(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferMessageOnClick', args) - ); - } - - onApply(...args) { - window.ps_checkout.events.dispatchEvent( - new CustomEvent('payLaterOfferMessageOnApply', args) - ); - } - - getContainerIdentifier(placement) { - return `#ps_checkout-paypal-pay-later-message-${placement}`; - } - - renderPayLaterOfferMessage() { - let containerIdentifier = this.getContainerIdentifier(this.props.placement); - let amount = 'product' === this.props.placement ? this.prestashopService.getProductPrice() : this.prestashopService.getCartAmount(); - let containerQuerySelector = this.querySelectorService.getPayLaterOfferMessageContainerSelector(this.props.placement); - - if (null === containerQuerySelector) { - return; - } - - this.instance.createContainer(containerIdentifier, containerQuerySelector); - - return this.payPalService - .getPayLaterOfferMessage(this.props.placement, amount, { - onRender: (...args) => this.onRender(...args), - onClick: (...args) => this.onClick(...args), - onApply: (...args) => this.onApply(...args) - }) - .render(containerIdentifier); - } - - render() { - this.renderPayLaterOfferMessage(); - this.prestashopService.onUpdatedCart(() => { - return this.renderPayLaterOfferMessage(); - }); - this.prestashopService.onUpdatedProduct(() => { - return this.renderPayLaterOfferMessage(); - }); - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_6.component.js b/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_6.component.js deleted file mode 100644 index e4563d660..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_6.component.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class PayLaterMessagePs1_6Component extends BaseComponent { - createContainer(containerIdentifier, querySelector) { - if (null === document.querySelector(containerIdentifier)) { - let containerElement = document.createElement('div'); - containerElement.id = containerIdentifier.slice(1); - containerElement.classList.add('paypal-pay-later-message'); - querySelector.append(containerElement); - } - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_7.component.js b/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_7.component.js deleted file mode 100644 index 983313bdc..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later-message.component/pay-later-message-ps1_7.component.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -export class PayLaterMessagePs1_7Component extends BaseComponent { - createContainer(containerIdentifier, querySelector) { - if (null === document.querySelector(containerIdentifier)) { - let containerElement = document.createElement('div'); - containerElement.id = containerIdentifier.slice(1); - containerElement.classList.add('paypal-pay-later-message'); - querySelector.append(containerElement); - } - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later.component/index.js b/_dev/js/front/src/components/ps-checkout-pay-later.component/index.js deleted file mode 100644 index ab6705f19..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later.component/index.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PsCheckoutPayLaterButtonPs1_6Component } from './ps-checkout-pay-later-button-ps1_6.component'; -import { PsCheckoutPayLaterButtonPs1_7Component } from './ps-checkout-pay-later-button-ps1_7.component'; - -export class PsCheckoutExpressPayLaterComponent extends BaseComponent { - static Inject = { - prestashopService: 'PrestashopService' - }; - - constructor(app, props) { - super(app, props); - - this.instance = new { - [PS_VERSION_1_6]: PsCheckoutPayLaterButtonPs1_6Component, - [PS_VERSION_1_7]: PsCheckoutPayLaterButtonPs1_7Component - }[this.prestashopService.getVersion()](app, props); - } - - render() { - return this.instance.render(); - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_6.component.js b/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_6.component.js deleted file mode 100644 index 0fc4dfd78..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_6.component.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -import { PayLaterButtonCartComponent } from '../1_6/pay-later-button-cart.component'; -import { PayLaterButtonCheckoutComponent } from '../1_6/pay-later-button-checkout.component'; -import { PayLaterButtonProductComponent } from '../1_6/pay-later-button-product.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PsCheckoutPayLaterButtonPs1_6Component extends BaseComponent { - static ID = 0; - - static Inject = { - config: 'PsCheckoutConfig', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi' - }; - - renderExpressCheckoutCustom() { - this.props.HTMLElement.classList.add('ps_checkout-express-button'); - this.props.HTMLElement.setAttribute( - 'express-button-id', - PsCheckoutPayLaterButtonPs1_6Component.ID - ); - - this.children.expressButton = new ExpressCheckoutButtonComponent(this.app, { - fundingSource: 'paylater', - querySelector: `.ps_checkout-express-button[express-button-id="${PsCheckoutPayLaterButtonPs1_6Component.ID++}"]`, - createOrder: (data) => - this.psCheckoutApi.postCreateOrder({ - ...(this.props.productData || data), - fundingSource: 'paylater', - isExpressCheckout: true - }) - }).render(); - } - - renderExpressCheckout() { - if (this.props.HTMLElement) { - this.renderExpressCheckoutCustom(); - return; - } - - if (this.prestashopService.isCartPage()) { - if (!this.config.payLater.button.cart) return this; - if (!window.ps_checkoutCartProductCount) return this; - - this.children.expressButton = new PayLaterButtonCartComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isOrderPersonalInformationStepPage()) { - if (!this.config.payLater.button.order) return this; - if (!window.ps_checkoutCartProductCount) return this; - this.children.expressButton = new PayLaterButtonCheckoutComponent( - this.app - ).render(); - - return this; - } - - if ( - this.prestashopService.isProductPage() && - !this.prestashopService.isIframeProductPage() - ) { - if (!this.config.payLater.button.product) return; - if ( - this.children.expressButton && - this.children.expressButton.checkoutExpressButton && - this.children.expressButton.checkoutExpressButton.parentNode - ) - return; - - this.children.expressButton = new PayLaterButtonProductComponent( - this.app - ).render(); - - return this; - } - } - - render() { - this.renderExpressCheckout(); - - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_7.component.js b/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_7.component.js deleted file mode 100644 index 8097223b4..000000000 --- a/_dev/js/front/src/components/ps-checkout-pay-later.component/ps-checkout-pay-later-button-ps1_7.component.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; - -import { PayLaterButtonCartComponent } from '../1_7/pay-later-button-cart.component'; -import { PayLaterButtonCheckoutComponent } from '../1_7/pay-later-button-checkout.component'; -import { PayLaterButtonProductComponent } from '../1_7/pay-later-button-product.component'; -import { ExpressCheckoutButtonComponent } from '../common/express-checkout-button.component'; - -export class PsCheckoutPayLaterButtonPs1_7Component extends BaseComponent { - static ID = 0; - - static Inject = { - config: 'PsCheckoutConfig', - prestashopService: 'PrestashopService', - psCheckoutApi: 'PsCheckoutApi' - }; - - renderExpressCheckoutCustom() { - this.props.HTMLElement.classList.add('ps_checkout-express-button'); - this.props.HTMLElement.setAttribute( - 'express-button-id', - PsCheckoutPayLaterButtonPs1_7Component.ID - ); - - this.children.expressButton = new ExpressCheckoutButtonComponent(this.app, { - fundingSource: 'paylater', - querySelector: `.ps_checkout-express-button[express-button-id="${PsCheckoutPayLaterButtonPs1_7Component.ID++}"]`, - createOrder: (data) => - this.psCheckoutApi.postCreateOrder({ - ...(this.props.productData || data), - fundingSource: 'paylater', - isExpressCheckout: true - }) - }).render(); - } - - renderExpressCheckout() { - if (this.props.HTMLElement) { - this.renderExpressCheckoutCustom(); - return; - } - - if (this.prestashopService.isCartPage()) { - if (!this.config.payLater.button.cart) return this; - if (document.body.classList.contains('cart-empty')) return this; - - this.children.expressButton = new PayLaterButtonCartComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isOrderPersonalInformationStepPage()) { - if (!this.config.payLater.button.order) return this; - this.children.expressButton = new PayLaterButtonCheckoutComponent( - this.app - ).render(); - - return this; - } - - if (this.prestashopService.isProductPage()) { - if (!this.config.payLater.button.product) return; - if ( - this.children.expressButton && - this.children.expressButton.checkoutExpressButton && - this.children.expressButton.checkoutExpressButton.parentNode - ) - return; - - this.children.expressButton = new PayLaterButtonProductComponent( - this.app - ).render(); - - return this; - } - } - - render() { - this.renderExpressCheckout(); - this.prestashopService.onUpdatedCart(() => { - return this.renderExpressCheckout(); - }); - - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout.component/index.js b/_dev/js/front/src/components/ps-checkout.component/index.js deleted file mode 100644 index 895cbffff..000000000 --- a/_dev/js/front/src/components/ps-checkout.component/index.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PsCheckoutPs1_6Component } from './ps-checkout-ps1_6.component'; -import { PsCheckoutPs1_7Component } from './ps-checkout-ps1_7.component'; - -export class PsCheckoutComponent extends BaseComponent { - static Inject = { - prestashopService: 'PrestashopService' - }; - - created() { - this.instance = new { - [PS_VERSION_1_6]: PsCheckoutPs1_6Component, - [PS_VERSION_1_7]: PsCheckoutPs1_7Component - }[this.prestashopService.getVersion()](this.app, this.props); - } - - render() { - return this.instance.render(); - } -} diff --git a/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_6.component.js b/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_6.component.js deleted file mode 100644 index 7c2b097fa..000000000 --- a/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_6.component.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { NotificationComponent } from '../1_6/notification.component'; -import { PaymentOptionsComponent } from '../1_6/payment-options.component'; -import { LoaderComponent } from '../common/loader.component'; -import { PaymentOptionsLoaderComponent } from '../common/payment-options-loader.component'; -import { ConditionsCheckboxComponent } from '../1_7/conditions-checkbox.component'; - -export class PsCheckoutPs1_6Component extends BaseComponent { - static Inject = { - prestashopService: 'PrestashopService' - }; - - created() { - this.app.root = this; - } - - renderCheckout() { - this.children.paymentOptionsLoader = new PaymentOptionsLoaderComponent( - this.app - ).render(); - - this.children.conditionsCheckbox = new ConditionsCheckboxComponent( - this.app - ).render(); - - // TODO: Move this to HTMLElementService - const cgv = document.getElementById('cgv'); - if ((cgv && cgv.checked) || !cgv) { - this.children.notification = new NotificationComponent( - this.app - ).render(); - this.children.loader = new LoaderComponent(this.app).render(); - this.children.paymentOptions = new PaymentOptionsComponent(this.app, { - markPosition: 'before' - }).render(); - } - - this.children.paymentOptionsLoader.hide(); - } - - render() { - this.renderCheckout(); - this.prestashopService.onUpdatePaymentMethods(() => { - this.renderCheckout(); - }); - - return this; - } -} diff --git a/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_7.component.js b/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_7.component.js deleted file mode 100644 index 44ddf0261..000000000 --- a/_dev/js/front/src/components/ps-checkout.component/ps-checkout-ps1_7.component.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from '../../core/dependency-injection/base.component'; -import { NotificationComponent } from '../1_7/notification.component'; -import { PaymentOptionsComponent } from '../1_7/payment-options.component'; -import { ConditionsCheckboxComponent } from '../1_7/conditions-checkbox.component'; -import { LoaderComponent } from '../common/loader.component'; -import { PaymentOptionsLoaderComponent } from '../common/payment-options-loader.component'; - -export class PsCheckoutPs1_7Component extends BaseComponent { - created() { - this.app.root = this; - } - - render() { - this.children.paymentOptionsLoader = new PaymentOptionsLoaderComponent( - this.app - ).render(); - - this.children.loader = new LoaderComponent(this.app).render(); - this.children.conditionsCheckbox = new ConditionsCheckboxComponent( - this.app - ).render(); - - this.children.notification = new NotificationComponent(this.app).render(); - this.children.paymentOptions = new PaymentOptionsComponent( - this.app - ).render(); - - this.children.paymentOptionsLoader.hide(); - - return this; - } -} diff --git a/_dev/js/front/src/config/paypal-sdk.config.js b/_dev/js/front/src/config/paypal-sdk.config.js deleted file mode 100644 index 418e4fa18..000000000 --- a/_dev/js/front/src/config/paypal-sdk.config.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const PayPalSdkConfig = { - sdkConfig: { - dataNamespace: 'ps_checkoutPayPalSdkInstance', - dataOrderId: window.ps_checkoutPayPalOrderId, - ...window.ps_checkoutPayPalSdkConfig - }, - buttonCustomization: window.ps_checkoutPayPalButtonConfiguration, - paymentFieldsCustomization: window.ps_checkout.paymentFieldsCustomization, - expressCheckoutButtonCustomization: - window.ps_checkoutExpressCheckoutButtonCustomization, - hostedFieldsCustomization: - window.ps_checkoutHostedFieldsCustomizationConfiguration, - payLaterOfferMessageCustomization: - window.ps_checkoutPayLaterOfferMessageCustomization, - payLaterOfferBannerCustomization: - window.ps_checkoutPayLaterOfferBannerCustomization, - partnerAttributionId: window.ps_checkoutPartnerAttributionId -}; - diff --git a/_dev/js/front/src/config/ps-checkout.config.js b/_dev/js/front/src/config/ps-checkout.config.js deleted file mode 100644 index 617582bdf..000000000 --- a/_dev/js/front/src/config/ps-checkout.config.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -function getTranslations() { - return { - ...Object.keys(window.ps_checkoutPayWithTranslations || {}).reduce( - (result, name) => { - result[`funding-source.name.${name}`] = - window.ps_checkoutPayWithTranslations[name]; - return result; - }, - {} - ), - ...window.ps_checkoutCheckoutTranslations - }; -} - -export const PsCheckoutConfig = { - createUrl: window.ps_checkoutCreateUrl, - checkCartUrl: window.ps_checkoutCheckUrl, - validateOrderUrl: window.ps_checkoutValidateUrl, - confirmationUrl: window.ps_checkoutConfirmUrl, - cancelUrl: window.ps_checkoutCancelUrl, - paymentUrl: window.ps_checkoutPaymentUrl, - checkoutCheckoutUrl: window.ps_checkoutCheckoutUrl, - expressCheckoutUrl: window.ps_checkoutExpressCheckoutUrl, - vaultUrl: window.ps_checkoutVaultUrl, - - iconPath: window.ps_checkoutIconsPath, - - hostedFieldsEnabled: window.ps_checkoutHostedFieldsEnabled, - hostedFieldsContingencies: window.ps_checkoutHostedFieldsContingencies, - - translations: getTranslations(), - - loaderImage: window.ps_checkoutLoaderImage, - customMark: { - card: window.ps_checkoutCardFundingSourceImg, - ...window.ps_checkoutVaultedPaymentMarks - }, - - autoRenderDisabled: window.ps_checkoutAutoRenderDisabled, - expressCheckout: { - active: window.ps_checkoutExpressCheckoutSelected, - enabled: { - cart: window.ps_checkoutExpressCheckoutCartEnabled, - order: window.ps_checkoutExpressCheckoutOrderEnabled, - product: window.ps_checkoutExpressCheckoutProductEnabled - } - }, - - payLater: { - message: { - order: window.ps_checkoutPayLaterOrderPageMessageEnabled, - product: window.ps_checkoutPayLaterProductPageMessageEnabled - }, - banner: { - home: window.ps_checkoutPayLaterHomePageBannerEnabled, - category: window.ps_checkoutPayLaterCategoryPageBannerEnabled, - order: window.ps_checkoutPayLaterOrderPageBannerEnabled, - product: window.ps_checkoutPayLaterProductPageBannerEnabled - }, - button: { - cart: window.ps_checkoutPayLaterCartPageButtonEnabled, - order: window.ps_checkoutPayLaterOrderPageButtonEnabled, - product: window.ps_checkoutPayLaterProductPageButtonEnabled - } - }, - - fundingSourcesSorted: window.ps_checkoutFundingSourcesSorted, - - orderId: window.ps_checkoutPayPalOrderId, - imgTitlePaymentMethodLogos: window.ps_checkoutPaymentMethodLogosTitleImg, - renderPaymentMethodLogos: window.ps_checkoutRenderPaymentMethodLogos, - cardSupportedBrands: window.ps_checkoutCardBrands, - cardLogoBrands: window.ps_checkoutCardLogos, - fundingSource: window.ps_checkoutFundingSource, -}; diff --git a/_dev/js/front/src/constants/html-selectors-ps1_6.constants.js b/_dev/js/front/src/constants/html-selectors-ps1_6.constants.js deleted file mode 100644 index c3de3a016..000000000 --- a/_dev/js/front/src/constants/html-selectors-ps1_6.constants.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -/* istanbul ignore file */ -// TODO: Remove this -export const HtmlSelectorsPs1_6Constants = { - ANY_PAYMENT_OPTION: '#ps_checkout-displayPayment .payment-option.row', - - CHECKOUT_PAYMENT_OPTIONS_CONTAINER: - '#ps_checkout-displayPayment .payment-options', - - NOTIFICATION_TARGET_ID: 'HOOK_PAYMENT', - - NOTIFICATION_CONTAINER_ID: 'ps_checkout-notification-container', - NOTIFICATION_PAYMENT_CANCELED_ID: 'ps_checkout-canceled', - NOTIFICATION_PAYMENT_ERROR_ID: 'ps_checkout-error', - NOTIFICATION_PAYMENT_ERROR_TEXT_ID: 'ps_checkout-error-text', - - PAYMENT_OPTION: '.row', - PAYMENT_OPTION_CONTAINER: '.payment-option-container', - - PAYMENT_OPTIONS_CONTAINER: 'HOOK_PAYMENT' -}; diff --git a/_dev/js/front/src/constants/html-selectors-ps1_7.constants.js b/_dev/js/front/src/constants/html-selectors-ps1_7.constants.js deleted file mode 100644 index 94a6cb35e..000000000 --- a/_dev/js/front/src/constants/html-selectors-ps1_7.constants.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -/* istanbul ignore file */ -// TODO: Remove this -export const HtmlSelectorsPs1_7Constants = { - ANY_PAYMENT_OPTION: '[data-module-name="ps_checkout"]', - - BUTTONS_CONTAINER_ID: 'ps_checkout-buttons-container', - - CHECKOUT_EXPRESS_CART_BUTTON_CONTAINER_ID: - 'js-ps_checkout-express-button-container', - CHECKOUT_EXPRESS_CHECKOUT_BUTTON_CONTAINER: - '#checkout-personal-information-step .content', - CHECKOUT_EXPRESS_PRODUCT_BUTTON_CONTAINER: '.product-add-to-cart', - - CONDITIONS_CHECKBOX_CONTAINER_ID: 'conditions-to-approve', - CONDITION_CHECKBOX: 'input[type="checkbox"]', - - HOSTED_FIELDS_FORM_ID: 'ps_checkout-hosted-fields-form', - - NOTIFICATION_CONDITIONS: '.accept-cgv', - NOTIFICATION_PAYMENT_CANCELED_ID: 'ps_checkout-canceled', - NOTIFICATION_PAYMENT_ERROR_ID: 'ps_checkout-error', - NOTIFICATION_PAYMENT_ERROR_TEXT_ID: 'ps_checkout-error-text', - - PAYMENT_OPTION: '[name="payment-option"]', - PAYMENT_OPTION_LABEL: id => `label[for="${id}"]`, - PAYMENT_OPTION_SELECT: '[name="select_payment_option"]', - PAYMENT_OPTION_CONTAINER_ID: id => `${id}-container`, - PAYMENT_OPTION_ADDITIONAL_INFORMATION_ID: id => - `${id}-additional-information`, - PAYMENT_OPTION_FORM_CONTAINER_ID: id => `pay-with-${id}-form`, - PAYMENT_OPTION_FORM_BUTTON: id => `#pay-with-${id}`, - - PAYMENT_OPTIONS_CONTAINER: '.payment-options' -}; diff --git a/_dev/js/front/src/constants/ps-version.constants.js b/_dev/js/front/src/constants/ps-version.constants.js deleted file mode 100644 index 9f9ce9542..000000000 --- a/_dev/js/front/src/constants/ps-version.constants.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const PS_VERSION_1_6 = '1.6'; -export const PS_VERSION_1_7 = '1.7'; diff --git a/_dev/js/front/src/core/app.js b/_dev/js/front/src/core/app.js deleted file mode 100644 index 8655e4a1c..000000000 --- a/_dev/js/front/src/core/app.js +++ /dev/null @@ -1,240 +0,0 @@ -import Bottle from 'bottlejs'; - -import { PsCheckoutApi } from '../api/ps-checkout.api'; -import { PayPalSdkConfig } from '../config/paypal-sdk.config'; -import { PsCheckoutConfig } from '../config/ps-checkout.config'; -import { PsCheckoutComponent } from '../components/ps-checkout.component'; -import { PsCheckoutExpressComponent } from '../components/ps-checkout-express.component'; -import { PsCheckoutExpressPayLaterComponent } from '../components/ps-checkout-pay-later.component'; -import { HTMLElementService } from '../service/html-element.service'; -import { PayPalService } from '../service/paypal.service'; -import { PrestashopService } from '../service/prestashop.service'; -import { TranslationService } from '../service/translation.service'; -import { QuerySelectorService } from '../service/query-selector.service'; -import { PaymentOptionsLoaderComponent } from '../components/common/payment-options-loader.component'; -import { PayLaterMessageComponent } from '../components/ps-checkout-pay-later-message.component'; -import { PayLaterBannerComponent } from '../components/ps-checkout-pay-later-banner.component'; -import { loadScript } from '@paypal/paypal-js'; -import { PaymentMethodLogosComponent } from '../components/common/payment-method-logos.component'; - -function initService(app) { - return (service) => () => new service(app); -} - -/** - * @param {ContainerAwareClass} app - */ -function initContainer(app) { - const bottle = app.bottle; - const serviceFactory = initService(app); - - bottle.value('PayPalSdkConfig', PayPalSdkConfig); - bottle.value('PsCheckoutConfig', PsCheckoutConfig); - - bottle.service('PrestashopService', PrestashopService); - - bottle.factory('HTMLElementService', serviceFactory(HTMLElementService)); - bottle.factory('QuerySelectorService', serviceFactory(QuerySelectorService)); - bottle.factory('PsCheckoutApi', serviceFactory(PsCheckoutApi)); - bottle.factory('TranslationService', serviceFactory(TranslationService)); - bottle.factory( - 'PaymentOptionsLoaderComponent', - serviceFactory(PaymentOptionsLoaderComponent) - ); - - bottle.factory('$', (container) => { - return (id) => container.TranslationService.getTranslationString(id); - }); -} - -export class App { - constructor() { - this.bottle = new Bottle(); - this.container = this.bottle.container; - initContainer(this); - - this.psCheckoutConfig = this.container.PsCheckoutConfig; - this.prestashopService = this.container.PrestashopService; - this.paymentOptionsLoader = this.container.PaymentOptionsLoaderComponent; - - this.$ = this.container.$; - - this.root = null; - } - - exposeAPI() { - window.ps_checkout.renderCheckout = () => { - return this.renderCheckout(); - }; - - window.ps_checkout.renderExpressCheckout = (props) => { - return this.renderExpressCheckout(props); - }; - - window.ps_checkout.renderPayLaterOfferMessage = (props) => { - return this.renderPayLaterOfferMessage(props); - }; - } - - async initPayPalService() { - return new Promise((resolve, reject) => { - loadScript(PayPalSdkConfig.sdkConfig) - .then((paypal) => { - this.bottle.value('PayPalSDK', paypal); - if (!this.container.PayPalService) { - this.bottle.factory( - 'PayPalService', - initService(this)(PayPalService) - ); - } - resolve(paypal); - }) - .catch((error) => { - console.error(this.$('error.paypal-sdk'), error); - reject(); - }); - }); - } - - async renderCheckout() { - await this.initPayPalService(); - new PsCheckoutComponent(this).render(); - } - - async renderExpressCheckout(props) { - await this.initPayPalService(); - new PsCheckoutExpressComponent(this, props).render(); - } - - async renderExpressCheckoutPayLater(props) { - await this.initPayPalService(); - new PsCheckoutExpressPayLaterComponent(this, props).render(); - } - - async renderPayLaterOfferMessage(props) { - await this.initPayPalService(); - new PayLaterMessageComponent(this, props).render(); - } - - async renderPayLaterOfferBanner(props) { - await this.initPayPalService(); - new PayLaterBannerComponent(this, props).render(); - } - - async renderPaymentMethodLogos(props) { - await this.initPayPalService(); - new PaymentMethodLogosComponent(this, props).render(); - } - - async render() { - this.exposeAPI(); - - if (!this.psCheckoutConfig.autoRenderDisabled) { - // Pay Later Message on Product Page - if ( - this.psCheckoutConfig.payLater.message.product && - this.prestashopService.isProductPage() - ) { - await this.renderPayLaterOfferMessage({ - placement: 'product' - }); - } - - // Pay Later Message on Cart & Order Page - if ( - this.psCheckoutConfig.payLater.message.order && - (this.prestashopService.isOrderPage() || - this.prestashopService.isCartPage()) - ) { - await this.renderPayLaterOfferMessage({ - placement: 'cart' - }); - } - - // Pay Later Banner on Homepage - if ( - this.psCheckoutConfig.payLater.banner.home && - this.prestashopService.isHomePage() - ) { - await this.renderPayLaterOfferBanner({ - placement: 'home' - }); - } - - // Pay Later Banner on Category Page - if ( - this.psCheckoutConfig.payLater.banner.category && - this.prestashopService.isCategoryPage() - ) { - await this.renderPayLaterOfferBanner({ - placement: 'category' - }); - } - - // Pay Later Message on Cart & Order Page - if ( - this.psCheckoutConfig.payLater.banner.order && - (this.prestashopService.isOrderPage() || - this.prestashopService.isCartPage()) - ) { - await this.renderPayLaterOfferBanner({ - placement: 'cart' - }); - } - - // Pay Later Message on Product Page - if ( - this.psCheckoutConfig.payLater.banner.product && - this.prestashopService.isProductPage() - ) { - await this.renderPayLaterOfferBanner({ - placement: 'product' - }); - } - - // Funding source logo - if ( - this.psCheckoutConfig.renderPaymentMethodLogos && - this.prestashopService.isProductPage() - ) { - await this.renderPaymentMethodLogos({ - placement: 'product' - }); - } - - if ( - this.psCheckoutConfig.renderPaymentMethodLogos && - this.prestashopService.isCartPage() - ) { - await this.renderPaymentMethodLogos({ - placement: 'cart' - }); - } - - if ( - this.prestashopService.isCartPage() || - this.prestashopService.isOrderPersonalInformationStepPage() || - this.prestashopService.isProductPage() - ) { - await this.renderExpressCheckout(); - await this.renderExpressCheckoutPayLater(); - - if (this.prestashopService.isOrderPersonalInformationStepPage()) { - await this.renderCheckout(); - } - - return this; - } - - if (this.prestashopService.isOrderPaymentStepPage()) { - await this.renderCheckout(); - return this; - } else if (this.prestashopService.isOrderPage()) { - this.paymentOptionsLoader.hide(); - return this; - } - } - - return this; - } -} diff --git a/_dev/js/front/src/core/bootstrap.js b/_dev/js/front/src/core/bootstrap.js deleted file mode 100644 index a6d7ae774..000000000 --- a/_dev/js/front/src/core/bootstrap.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -/** - * @param {Function} onBootstrap - */ -export function bootstrap(onBootstrap) { - if ('loading' === document.readyState) { - document.addEventListener('DOMContentLoaded', onBootstrap); - } else { - onBootstrap(); - } -} diff --git a/_dev/js/front/src/core/dependency-injection/base.class.js b/_dev/js/front/src/core/dependency-injection/base.class.js deleted file mode 100644 index e541ead42..000000000 --- a/_dev/js/front/src/core/dependency-injection/base.class.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { inject } from '../../utils/dependency-injection/inject'; - -export class BaseClass { - constructor(app) { - this.app = app; - inject(BaseClass)(this, this.constructor); - } -} diff --git a/_dev/js/front/src/core/dependency-injection/base.class.spec.js b/_dev/js/front/src/core/dependency-injection/base.class.spec.js deleted file mode 100644 index 236a467dd..000000000 --- a/_dev/js/front/src/core/dependency-injection/base.class.spec.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { DI_CONTAINER } from '../../../test/mocks/di-container.mock'; - -describe('src/core/dependency-injection/base-class.spec.js', () => { - let BaseClass; - - let inject; - let injector; - - beforeAll(() => { - injector = jest.fn(); - inject = jest.fn().mockReturnValue(injector); - - jest.doMock('../../utils/dependency-injection/inject', () => { - return { - __esModule: true, - inject - }; - }); - - return import('./base.class').then(({ BaseClass: BaseClassModule }) => { - BaseClass = BaseClassModule; - }); - }); - - afterAll(() => { - jest.resetModules(); - }); - - test('Inject is being called', () => { - new BaseClass(DI_CONTAINER); - expect(inject).toHaveBeenCalled(); - }); -}); diff --git a/_dev/js/front/src/core/dependency-injection/base.component.js b/_dev/js/front/src/core/dependency-injection/base.component.js deleted file mode 100644 index 930f985a4..000000000 --- a/_dev/js/front/src/core/dependency-injection/base.component.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseClass } from './base.class'; - -export class BaseComponent extends BaseClass { - constructor(app, props = {}) { - super(app); - - this.data = {}; - this.props = props; - - this.children = {}; - - this.created(); - } - - created() {} - - /** - * @return {this} - */ - render() { - return this; - } -} diff --git a/_dev/js/front/src/core/dependency-injection/base.component.spec.js b/_dev/js/front/src/core/dependency-injection/base.component.spec.js deleted file mode 100644 index 5757e0481..000000000 --- a/_dev/js/front/src/core/dependency-injection/base.component.spec.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseComponent } from './base.component'; - -import { DI_CONTAINER } from '../../../test/mocks/di-container.mock'; - -describe.only('src/core/dependency-injection/base-component.spec.js', () => { - test('Simple Initialization', () => { - let createdCalled = false; - const cls = class extends BaseComponent { - created() { - createdCalled = true; - } - }; - - const instance = new cls(DI_CONTAINER); - expect(createdCalled).toBeTruthy(); - - expect(instance.data).toMatchObject({}); - expect(instance.props).toMatchObject({}); - expect(instance.children).toMatchObject({}); - }); - - test('Props Initialization', () => { - const props = { foo: 'Foo', bar: 'Bar' }; - const cls = class extends BaseComponent {}; - - const instance = new cls(DI_CONTAINER, props); - expect(instance.props).toMatchObject(props); - }); - - test('Base Render', () => { - const cls = class extends BaseComponent {}; - - const instance = new cls(DI_CONTAINER); - expect(instance.render()).toBe(instance); - }); -}); diff --git a/_dev/js/front/src/index.js b/_dev/js/front/src/index.js deleted file mode 100644 index db7336f7e..000000000 --- a/_dev/js/front/src/index.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import './utils/polyfills'; -import './utils/globals'; - -import { App } from './core/app'; -import { bootstrap } from './core/bootstrap'; - -bootstrap(async () => { - window.ps_checkout = window.ps_checkout || {}; - if (window.ps_checkout.app) { - return console.error( - 'There is an existing instance of `ps_checkout` on this context.' - ); - } - - window.ps_checkout.app = new App(); - window.ps_checkout.events.dispatchEvent( - new CustomEvent('init', { detail: { ps_checkout: window.ps_checkout } }) - ); - await window.ps_checkout.app.render(); - window.ps_checkout.events.dispatchEvent( - new CustomEvent('loaded', { detail: { ps_checkout: window.ps_checkout } }) - ); -}); diff --git a/_dev/js/front/src/service/html-element.service/html-element-ps1_6.service.js b/_dev/js/front/src/service/html-element.service/html-element-ps1_6.service.js deleted file mode 100644 index 45c8fe8b5..000000000 --- a/_dev/js/front/src/service/html-element.service/html-element-ps1_6.service.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -/* istanbul ignore file */ -// TODO: Remove this service (replace this with QuerySelectorService or local methods) -import { HtmlSelectorsPs1_6Constants } from '../../constants/html-selectors-ps1_6.constants'; - -export class HtmlElementPs1_6Service { - constructor() { - this.selectors = HtmlSelectorsPs1_6Constants; - } - - getBasePaymentOption() { - return document.querySelector(this.selectors.ANY_PAYMENT_OPTION); - } - - getCheckoutPaymentOptionsContainer() { - return document.querySelector( - this.selectors.CHECKOUT_PAYMENT_OPTIONS_CONTAINER - ); - } - - getNotificationPaymentContainer(cache = false) { - if (!this.notificationPaymentContainer || cache) { - this.notificationPaymentContainer = document.getElementById( - this.selectors.NOTIFICATION_CONTAINER_ID - ); - } - - return this.notificationPaymentContainer; - } - - getNotificationPaymentContainerTarget(cache = false) { - if (!this.notificationPaymentContainerTarget || cache) { - this.notificationPaymentContainerTarget = document.getElementById( - this.selectors.NOTIFICATION_TARGET_ID - ); - } - - return this.notificationPaymentContainerTarget; - } - - getNotificationPaymentCanceled(cache = false) { - if (!this.notificationPaymentCanceled || cache) { - this.notificationPaymentCanceled = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_CANCELED_ID - ); - } - - return this.notificationPaymentCanceled; - } - - getNotificationPaymentError(cache = false) { - if (!this.notificationPaymentError || cache) { - this.notificationPaymentError = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_ERROR_ID - ); - } - - return this.notificationPaymentError; - } - - getNotificationPaymentErrorText(cache = false) { - if (!this.notificationPaymentErrorText || cache) { - this.notificationPaymentErrorText = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_ERROR_TEXT_ID - ); - } - - return this.notificationPaymentErrorText; - } - - getPaymentOptionsContainer() { - return document.getElementById(this.selectors.PAYMENT_OPTIONS_CONTAINER); - } - - getPaymentOptions() { - return Array.prototype.slice.call( - this.getPaymentOptionsContainer().querySelectorAll( - this.selectors.PAYMENT_OPTION - ) - ); - } - - getPaymentOptionContainer(container) { - return container.querySelector(this.selectors.PAYMENT_OPTION_CONTAINER); - } -} diff --git a/_dev/js/front/src/service/html-element.service/html-element-ps1_7.service.js b/_dev/js/front/src/service/html-element.service/html-element-ps1_7.service.js deleted file mode 100644 index 0eb476793..000000000 --- a/_dev/js/front/src/service/html-element.service/html-element-ps1_7.service.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -/* istanbul ignore file */ -// TODO: Remove this service (replace this with QuerySelectorService or local methods) -import { HtmlSelectorsPs1_7Constants } from '../../constants/html-selectors-ps1_7.constants'; - -export class HtmlElementPs1_7Service { - constructor() { - this.selectors = HtmlSelectorsPs1_7Constants; - } - - getBasePaymentOption(cache = false) { - if (!this.basePaymentOption || cache) { - this.basePaymentOption = document.querySelector( - this.selectors.ANY_PAYMENT_OPTION - ); - } - - return this.basePaymentOption; - } - - getButtonContainer(cache = false) { - if (!this.buttonContainer || cache) { - this.buttonContainer = document.getElementById( - this.selectors.BUTTONS_CONTAINER_ID - ); - } - - return this.buttonContainer; - } - - getCheckoutExpressCartButtonContainer() { - return document.getElementById( - this.selectors.CHECKOUT_EXPRESS_CART_BUTTON_CONTAINER_ID - ); - } - - getCheckoutExpressCheckoutButtonContainer() { - return document.querySelector( - this.selectors.CHECKOUT_EXPRESS_CHECKOUT_BUTTON_CONTAINER - ); - } - - getCheckoutExpressProductButtonContainer() { - return document.querySelector( - this.selectors.CHECKOUT_EXPRESS_PRODUCT_BUTTON_CONTAINER - ); - } - - getConditionsCheckboxContainer(cache = false) { - if (!this.conditionsCheckboxContainer || cache) { - this.conditionsCheckboxContainer = document.getElementById( - this.selectors.CONDITIONS_CHECKBOX_CONTAINER_ID - ); - } - - return this.conditionsCheckboxContainer; - } - - getConditionsCheckboxes(container) { - return container - ? Array.prototype.slice.call( - container.querySelectorAll(this.selectors.CONDITION_CHECKBOX) - ) - : null; - } - - getHostedFieldsForm(cache = false) { - if (!this.hostedFieldsForm || cache) { - this.hostedFieldsForm = document.getElementById( - this.selectors.HOSTED_FIELDS_FORM_ID - ); - } - - return this.hostedFieldsForm; - } - - getNotificationConditions(cache = false) { - if (!this.notificationConditions || cache) { - this.notificationConditions = document.querySelector( - this.selectors.NOTIFICATION_CONDITIONS - ); - } - - return this.notificationConditions; - } - - getNotificationPaymentCanceled(cache = false) { - if (!this.notificationPaymentCanceled || cache) { - this.notificationPaymentCanceled = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_CANCELED_ID - ); - } - - return this.notificationPaymentCanceled; - } - - getNotificationPaymentError(cache = false) { - if (!this.notificationPaymentError || cache) { - this.notificationPaymentError = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_ERROR_ID - ); - } - - return this.notificationPaymentError; - } - - getNotificationPaymentErrorText(cache = false) { - if (!this.notificationPaymentErrorText || cache) { - this.notificationPaymentErrorText = document.getElementById( - this.selectors.NOTIFICATION_PAYMENT_ERROR_TEXT_ID - ); - } - - return this.notificationPaymentErrorText; - } - - getPaymentOption(container) { - return container.querySelector(this.selectors.PAYMENT_OPTION); - } - - getPaymentOptionLabel(container, text) { - const items = Array.prototype.slice.call(container.querySelectorAll('*')); - return items.find(item => item.innerText === text); - } - - getPaymentOptionLabelLegacy(container, id) { - return container.querySelector(this.selectors.PAYMENT_OPTION_LABEL(id)); - } - - getPaymentOptionSelect(container) { - return container.querySelector(this.selectors.PAYMENT_OPTION_SELECT); - } - - getPaymentOptionContainer(id) { - return document.getElementById( - this.selectors.PAYMENT_OPTION_CONTAINER_ID(id) - ); - } - - getPaymentOptionAdditionalInformation(id) { - return document.getElementById( - this.selectors.PAYMENT_OPTION_ADDITIONAL_INFORMATION_ID(id) - ); - } - - getPaymentOptionFormContainer(id) { - return document.getElementById( - this.selectors.PAYMENT_OPTION_FORM_CONTAINER_ID(id) - ); - } - - getPaymentOptionFormButton(container, id) { - return container.querySelector( - this.selectors.PAYMENT_OPTION_FORM_BUTTON(id) - ); - } - - getPaymentOptionsContainer(cache = false) { - if (!this.paymentOptionsContainer || cache) { - this.paymentOptionsContainer = document.querySelector( - this.selectors.PAYMENT_OPTIONS_CONTAINER - ); - } - - return this.paymentOptionsContainer; - } - - getPaymentOptions(cache = false) { - if (!this.paymentOptions || cache) { - this.paymentOptions = this.getPaymentOptionsContainer( - cache - ).querySelectorAll(this.selectors.PAYMENT_OPTION); - - this.paymentOptions = Array.prototype.slice.call(this.paymentOptions); - } - - return this.paymentOptions; - } -} diff --git a/_dev/js/front/src/service/html-element.service/index.js b/_dev/js/front/src/service/html-element.service/index.js deleted file mode 100644 index 21a4b5de1..000000000 --- a/_dev/js/front/src/service/html-element.service/index.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; -import { BaseClass } from '../../core/dependency-injection/base.class'; - -import { HtmlElementPs1_6Service } from './html-element-ps1_6.service'; -import { HtmlElementPs1_7Service } from './html-element-ps1_7.service'; - -export class HTMLElementService extends BaseClass { - static Inject = { - prestashopService: 'PrestashopService' - }; - - constructor(app) { - super(app); - - this.instance = new { - [PS_VERSION_1_6]: HtmlElementPs1_6Service, - [PS_VERSION_1_7]: HtmlElementPs1_7Service - }[this.prestashopService.getVersion()](app); - } - - getBasePaymentOption() { - return this.instance.getBasePaymentOption(); - } - - getButtonContainer() { - return this.instance.getButtonContainer(); - } - - getBasePaymentConfirmation() { - return this.instance.getBasePaymentConfirmation(); - } - - getCheckoutExpressCartButtonContainer() { - return this.instance.getCheckoutExpressCartButtonContainer(); - } - - getCheckoutExpressCheckoutButtonContainer() { - return this.instance.getCheckoutExpressCheckoutButtonContainer(); - } - - getCheckoutExpressProductButtonContainer() { - return this.instance.getCheckoutExpressProductButtonContainer(); - } - - getConditionsCheckboxContainer() { - return this.instance.getConditionsCheckboxContainer(); - } - - getConditionsCheckboxes(container) { - return this.instance.getConditionsCheckboxes(container); - } - - getHostedFieldsForm() { - return this.instance.getHostedFieldsForm(); - } - - getNotificationConditions() { - return this.instance.getNotificationConditions(); - } - - getNotificationPaymentCanceled() { - return this.instance.getNotificationPaymentCanceled(); - } - - getNotificationPaymentContainer() { - return this.instance.getNotificationPaymentContainer(); - } - - getNotificationPaymentContainerTarget() { - return this.instance.getNotificationPaymentContainerTarget(); - } - - getNotificationPaymentError() { - return this.instance.getNotificationPaymentError(); - } - - getNotificationPaymentErrorText() { - return this.instance.getNotificationPaymentErrorText(); - } - - getPaymentOption(container) { - return this.instance.getPaymentOption(container); - } - - getPaymentOptionLabel(container, text) { - return this.instance.getPaymentOptionLabel(container, text); - } - - getPaymentOptionLabelLegacy(container, id) { - return this.instance.getPaymentOptionLabelLegacy(container, id); - } - - getPaymentOptionSelect(container) { - return this.instance.getPaymentOptionSelect(container); - } - - getPaymentOptionContainer(id) { - return this.instance.getPaymentOptionContainer(id); - } - - getPaymentOptionAdditionalInformation(id) { - return this.instance.getPaymentOptionAdditionalInformation(id); - } - - getPaymentOptionFormContainer(id) { - return this.instance.getPaymentOptionFormContainer(id); - } - - getPaymentOptionFormButton(container, id) { - return this.instance.getPaymentOptionFormButton(container, id); - } - - getPaymentOptionsContainer() { - return this.instance.getPaymentOptionsContainer(); - } - - getPaymentOptions() { - return this.instance.getPaymentOptions(); - } -} diff --git a/_dev/js/front/src/service/paypal.service.js b/_dev/js/front/src/service/paypal.service.js deleted file mode 100644 index 91ca283d5..000000000 --- a/_dev/js/front/src/service/paypal.service.js +++ /dev/null @@ -1,326 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * @typedef PaypalButtonEvents - * @type {*} - * - * @property {function} onInit - * @property {function} onClick - * @property {function} onError - * @property {function} onApprove - * @property {function} onCancel - * @property {function} createOrder - */ - -/** - * @typedef PaypalPayLaterOfferStyle - * @type {*} - * - * @property {string} layout - * @property {string} color - * @property {string} ratio - * @property {object} logo - * @property {string} logo.type - * @property {string} logo.position - * @property {object} text - * @property {string} text.color - * @property {string} text.size - * @property {string} text.align - */ - -/** - * @typedef PayPayCardFieldsOptions - * @type {*} - * - * @property {function} createOrder - * @property {function} onApprove - * @property {function} onError - * @property {function} inputEvents - * @property {object} style - */ - -/** - * @typedef PaypalPayLaterOfferEvents - * @type {*} - * - * @property {function} onRender - * @property {function} onClick - * @property {function} onApply - */ - -/** - * @typedef PaypalMarks - * @type {*} - * - * @property {function} isEligible - * @property {function} render - */ - -import { BaseClass } from '../core/dependency-injection/base.class'; - -export class PayPalService extends BaseClass { - static Inject = { - configPayPal: 'PayPalSdkConfig', - configPrestaShop: 'PsCheckoutConfig', - sdk: 'PayPalSDK', - $: '$' - }; - - getOrderId() { - return this.configPrestaShop.orderId; - } - - getFundingSource() { - return this.configPrestaShop.fundingSource; - } - - /** - * @param {string} fundingSource - * @param {PaypalButtonEvents} events - */ - getButtonExpress(fundingSource, events) { - return this.sdk.Buttons({ - fundingSource: fundingSource, - style: this.getButtonCustomizationStyle(fundingSource), - commit: false, - ...events - }); - } - - /** - * @param {string} fundingSource - * @param {PaypalButtonEvents} events - */ - getButtonPayment(fundingSource, events) { - return this.sdk.Buttons({ - fundingSource: fundingSource, - style: this.getButtonCustomizationStyle(fundingSource), - ...events - }); - } - - /** - * @param {string} fundingSource - */ - getButtonCustomizationStyle(fundingSource) { - const style = { - ...{ label: 'pay', color: 'gold', shape: 'pill' }, - ...(this.configPayPal.buttonCustomization || {}), - ...(window.ps_checkout.PayPalButtonCustomization || {}) - }; - - if (fundingSource === 'paypal') { - return style; - } else if (fundingSource === 'paylater') { - return { shape: style.shape, color: style.color }; - } - - return {}; - } - - /** - * @param {*} fieldSelectors - * @param {string} fieldSelectors.name - * @param {string} fieldSelectors.number - * @param {string} fieldSelectors.cvv - * @param {string} fieldSelectors.expiry - * - * @param {PayPayCardFieldsOptions} options - * - * @returns {PayPalSdk.CardFields} - */ - async getCardFields(fieldSelectors, options) { - const cardFields = this.sdk.CardFields(options); - - const nameField = cardFields.NameField({ - placeholder: this.$('paypal.hosted-fields.placeholder.card-name') - }); - const numberField = cardFields.NumberField({ - placeholder: this.$('paypal.hosted-fields.placeholder.card-number') - }); - const expiryField = cardFields.ExpiryField({ - placeholder: this.$('paypal.hosted-fields.placeholder.expiration-date') - }); - const cvvField = cardFields.CVVField({ - placeholder: this.$('paypal.hosted-fields.placeholder.cvv') - }); - - try { - await numberField.render(fieldSelectors.number); - await expiryField.render(fieldSelectors.expiry); - await cvvField.render(fieldSelectors.cvv); - await nameField.render(fieldSelectors.name); - } catch (e) { - return console.error('Failed to render CardFields', e); - } - - const nameLabel = document.querySelector( - `label[for="${fieldSelectors.name.id}"]` - ); - const numberLabel = document.querySelector( - `label[for="${fieldSelectors.number.id}"]` - ); - const cvvLabel = document.querySelector( - `label[for="${fieldSelectors.cvv.id}"]` - ); - const expirationDateLabel = document.querySelector( - `label[for="${fieldSelectors.expiry.id}"]` - ); - - nameLabel.innerHTML = this.$('paypal.hosted-fields.label.card-name'); - numberLabel.innerHTML = this.$('paypal.hosted-fields.label.card-number'); - cvvLabel.innerHTML = this.$('paypal.hosted-fields.label.cvv'); - expirationDateLabel.innerHTML = this.$( - 'paypal.hosted-fields.label.expiration-date' - ); - - return cardFields; - } - - getEligibleFundingSources(cache = false) { - if (!this.eligibleFundingSources || cache) { - const paypalFundingSources = this.sdk.getFundingSources(); - this.eligibleFundingSources = ( - this.configPrestaShop.fundingSourcesSorted || paypalFundingSources - ) - .filter( - (fundingSource) => paypalFundingSources.includes(fundingSource) || fundingSource.includes('token') - ) - .map((fundingSource) => ({ - name: fundingSource, - mark: fundingSource.includes('token') ? null : this.sdk.Marks({ fundingSource }) - })) - .filter((fundingSource) => { - if ( - fundingSource.name === 'card' && - this.isCardFieldsEnabled() && - !this.isCardFieldsEligible() - ) { - console.warn( - 'Card Fields (CCF) eligibility is declined. Switching to PayPal branded card fields (SCF)' - ); - } - - if (fundingSource.name.includes('token')) { - return true; - } - - console.log(fundingSource.name, fundingSource.mark.isEligible()); - - return fundingSource.mark.isEligible(); - }); - } - - return this.eligibleFundingSources; - } - - isFundingEligible(fundingSource) { - return this.getEligibleFundingSources().contains(fundingSource); - } - - isCardFieldsEnabled() { - return this.sdk.CardFields && this.configPrestaShop.hostedFieldsEnabled; - } - - isCardFieldsEligible() { - return this.sdk.CardFields && this.sdk.CardFields().isEligible(); - } - - /** - * @param {string} placement - * @param {string} amount - * @param {PaypalPayLaterOfferEvents} events - */ - getPayLaterOfferMessage(placement, amount, events) { - const style = { - ...{ - layout: 'text', - logo: { - type: 'inline' - } - }, - ...(this.configPayPal.payLaterOfferMessageCustomization || {}), - ...(window.ps_checkout.payLaterOfferMessageCustomization || {}) - }; - return ( - this.sdk.Messages && - this.sdk.Messages({ - placement: placement, - amount: amount, - style: style, - ...events - }) - ); - } - - /** - * @param {string} placement - * @param {string} amount - * @param {PaypalPayLaterOfferEvents} events - */ - getPayLaterOfferBanner(placement, amount, events) { - const style = { - ...{ - layout: 'flex', - ratio: '20x1' - }, - ...(this.configPayPal.payLaterOfferBannerCustomization || {}), - ...(window.ps_checkout.payLaterOfferBannerCustomization || {}) - }; - return ( - this.sdk.Messages && - this.sdk.Messages({ - placement: placement, - amount: amount, - style: style, - ...events - }) - ); - } - - /** - * @param {string} fundingSource - * @param {object} fields - */ - getPaymentFields(fundingSource, fields = {}) { - return this.sdk.PaymentFields && this.sdk.PaymentFields({ - fundingSource: fundingSource, - style: this.getPaymentFieldsCustomizationStyle(fundingSource), - fields: fields - }); - } - - /** - * @returns {object} - */ - getPaymentFieldsCustomizationStyle() { - return { - ...(this.configPayPal.paymentFieldsCustomization || {}), - ...(window.ps_checkout.paymentFieldsCustomization || {}) - }; - } - - /** - * @returns {PaypalMarks} - */ - getMarks() { - return this.sdk.Marks && this.sdk.Marks(); - } -} diff --git a/_dev/js/front/src/service/prestashop.service.spec.js b/_dev/js/front/src/service/prestashop.service.spec.js deleted file mode 100644 index d78d828fc..000000000 --- a/_dev/js/front/src/service/prestashop.service.spec.js +++ /dev/null @@ -1,214 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PrestashopService } from './prestashop.service'; -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../constants/ps-version.constants'; - -import * as PrestashopSite1_7 from '../../test/mocks/html-templates/prestashop-site-1_7'; -import PRODUCT_DATASET from '../../test/mocks/data/product-dataset.json'; - -// TODO: Refactor this class to use DIContainer -function buildDIContainerMock() { - return {}; -} - -describe('src/service/prestashop.service.spec.js', () => { - describe('PS_VERSION_1_6', () => { - beforeEach(() => (window.updatePaymentMethods = jest.fn())); - - afterEach(() => delete window.updatePaymentMethods); - - test('::getVersion() returns PS_VERSION_1_6', () => { - const psService = new PrestashopService(); - expect(psService.getVersion()).toBe(PS_VERSION_1_6); - }); - - // This method only works on 1.6 so listener will never be called - test("::onUpdatedCart() don't get called", () => { - const listener = jest.fn(); - const psService = new PrestashopService(); - - psService.onUpdatedCart(listener); - expect(listener).not.toHaveBeenCalled(); - }); - - test("::onUpdatePaymentMethods() don't get called if event is undefined", () => { - const listener = jest.fn(); - - delete window.updatePaymentMethods; - - const psService = new PrestashopService(); - - psService.onUpdatePaymentMethods(listener); - expect(listener).not.toHaveBeenCalled(); - }); - - test('::onUpdatePaymentMethods()', () => { - const listener = jest.fn(); - const psService = new PrestashopService(); - - psService.onUpdatePaymentMethods(listener); - window['updatePaymentMethods'](); - - expect(listener).toHaveBeenCalled(); - }); - }); - - describe('PS_VERSION_1_7', () => { - beforeEach( - () => - (window.prestashop = { - on: jest.fn() - }) - ); - - afterEach(() => delete window.prestashop); - - test('::getProductDetails()', () => { - PrestashopSite1_7.mockProductPage(); - - const psService = new PrestashopService(); - expect(psService.getProductDetails()).toEqual(PRODUCT_DATASET); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isCartPage()', () => { - PrestashopSite1_7.mockCartPage(); - - const psService = new PrestashopService(); - expect(psService.isCartPage()).toBeTruthy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPaymentStepPage() on wrong page', () => { - PrestashopSite1_7.mockProductPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPaymentStepPage()).toBeFalsy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPaymentStepPage() on wrong step', () => { - PrestashopSite1_7.mockCheckoutPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPaymentStepPage()).toBeFalsy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPaymentStepPage()', () => { - PrestashopSite1_7.mockCheckoutPaymentStepPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPaymentStepPage()).toBeTruthy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPersonalInformationStepPage() on wrong page', () => { - PrestashopSite1_7.mockProductPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPersonalInformationStepPage()).toBeFalsy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPersonalInformationStepPage() on wrong step', () => { - PrestashopSite1_7.mockCheckoutPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPersonalInformationStepPage()).toBeFalsy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isOrderPersonalInformationStepPage()', () => { - PrestashopSite1_7.mockCheckoutPersonalInformationStepPage(); - - const psService = new PrestashopService(); - expect(psService.isOrderPersonalInformationStepPage()).toBeTruthy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::isProductPage()', () => { - PrestashopSite1_7.mockProductPage(); - - const psService = new PrestashopService(); - expect(psService.isProductPage()).toBeTruthy(); - - PrestashopSite1_7.cleanSite(); - }); - - test('::getVersion() returns PS_VERSION_1_7', () => { - const psService = new PrestashopService(); - expect(psService.getVersion()).toBe(PS_VERSION_1_7); - }); - - test('::onUpdatedCart() errors if prestashop object is wrong', () => { - const listener = jest.fn(); - - const source = console.error; - console.error = jest.fn(); - - delete window.prestashop.on; - - const psService = new PrestashopService(); - - psService.onUpdatedCart(listener); - expect(console.error).toHaveBeenCalledTimes(1); - expect(listener).not.toHaveBeenCalled(); - - delete window.prestashop; - - psService.onUpdatedCart(listener); - expect(console.error).toHaveBeenCalledTimes(2); - expect(listener).not.toHaveBeenCalled(); - - console.error = source; - }); - - test('::onUpdatedCart()', () => { - const listener = jest.fn(); - const psService = new PrestashopService(); - - psService.onUpdatedCart(listener); - expect(window.prestashop.on).toHaveBeenCalledWith( - 'updatedCart', - listener - ); - }); - - // This method only works on 1.6 so listener will never be called - test("::onUpdatePaymentMethods() don't get called", () => { - const listener = jest.fn(); - const psService = new PrestashopService(); - - psService.onUpdatePaymentMethods(listener); - expect(listener).not.toHaveBeenCalled(); - }); - }); -}); diff --git a/_dev/js/front/src/service/prestashop.service/index.js b/_dev/js/front/src/service/prestashop.service/index.js deleted file mode 100644 index 34484be21..000000000 --- a/_dev/js/front/src/service/prestashop.service/index.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; - -import { PrestashopPs1_6Service } from './prestashop-ps1_6.service'; -import { PrestashopPs1_7Service } from './prestashop-ps1_7.service'; - -export class PrestashopService { - constructor() { - this.instance = { - [PS_VERSION_1_6]: PrestashopPs1_6Service, - [PS_VERSION_1_7]: PrestashopPs1_7Service - }[this.getVersion()]; - } - - getProductDetails() { - return this.instance.getProductDetails(); - } - - isHomePage() { - return !!this.instance.isHomePage(); - } - - isCategoryPage() { - return !!this.instance.isCategoryPage(); - } - - isCartPage() { - return !!this.instance.isCartPage(); - } - - isOrderPersonalInformationStepPage() { - return !!this.instance.isOrderPersonalInformationStepPage(); - } - - isOrderPaymentStepPage() { - return !!this.instance.isOrderPaymentStepPage(); - } - - isOrderPage() { - return this.instance.isOrderPage(); - } - - isNativeOnePageCheckoutPage() { - return this.instance.isNativeOnePageCheckoutPage(); - } - - isIframeProductPage() { - return !!this.instance.isIframeProductPage(); - } - - isProductPage() { - return !!this.instance.isProductPage(); - } - - isLogged() { - return this.instance.isLogged(); - } - - isGuestCheckoutEnabled() { - return this.instance.isGuestCheckoutEnabled(); - } - - hasProductInCart() { - return this.instance.hasProductInCart(); - } - - getCartAmount() { - return this.instance.getCartAmount(); - } - - getProductPrice() { - return this.instance.getProductPrice(); - } - - isAddToCartButtonDisabled() { - return this.instance.isAddToCartButtonDisabled(); - } - - getVersion() { - if (!window.prestashop) { - return PS_VERSION_1_6; - } - - return PS_VERSION_1_7; - } - - onUpdatedCart(listener) { - this.instance.onUpdatedCart(listener); - } - - onUpdatedProduct(listener) { - this.instance.onUpdatedProduct(listener); - } - - onUpdatePaymentMethods(listener) { - this.instance.onUpdatePaymentMethods(listener); - } - - onUpdatedShoppingCartExtra(listener) { - this.instance.onUpdatedShoppingCartExtra(listener); - } -} diff --git a/_dev/js/front/src/service/prestashop.service/prestashop-ps1_6.service.js b/_dev/js/front/src/service/prestashop.service/prestashop-ps1_6.service.js deleted file mode 100644 index 2b8181eef..000000000 --- a/_dev/js/front/src/service/prestashop.service/prestashop-ps1_6.service.js +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export class PrestashopPs1_6Service { - static getProductDetails() { - const id_product = document.getElementById('product_page_product_id'); - const id_product_attribute = document.getElementById('idCombination'); - const id_customization = window?.customizationId; - const quantity_wanted = document.getElementById('quantity_wanted'); - - return { - id_product: id_product?.value || '', - id_product_attribute: id_product_attribute?.value || '', - id_customization: id_customization || '', - quantity_wanted: quantity_wanted?.value || '' - }; - } - - static isHomePage() { - return document.body.id === 'index'; - } - - static isCategoryPage() { - return document.body.id === 'category'; - } - - static isCartPage() { - if (document.body.id === 'order') { - return document.querySelector('.step_current.first'); - } - - return false; - } - - static isOrderPaymentStepPage() { - if (document.body.id === 'order') { - return document.getElementById('ps_checkout-displayPayment'); - } - - return document.body.id === 'order-opc'; - } - - static isOrderPage() { - return document.body.id === 'order' || document.body.id === 'order-opc'; - } - - static isNativeOnePageCheckoutPage() { - return document.body.id === 'order-opc'; - } - - static isOrderPersonalInformationStepPage() { - return ( - document.body.id === 'authentication' || - (document.body.id === 'order-opc' && !window.isLogged && !window.isGuest) - ); - } - - static isIframeProductPage() { - return new URL(window.location).searchParams.get('content_only') === '1'; - } - - static isProductPage() { - return document.body.id === 'product'; - } - - static isLogged() { - return !!window.isLogged || !!window.isGuest; - } - - static isGuestCheckoutEnabled() { - return !!window.guestCheckoutEnabled; - } - - static hasProductInCart() { - return !!window.ps_checkoutCartProductCount; - } - - static getCartAmount() { - let cartAmountContainer = document.querySelector('.cart_block_total'); - - if (!cartAmountContainer) { - return ''; - } - - return cartAmountContainer.textContent.replace(',', '.').replace(/[^.\d]/g, ''); - } - - static getProductPrice() { - if (!window.productPrice) { - return ''; - } - - return Number.parseFloat(window.productPrice).toFixed(2) || ''; - } - - static isAddToCartButtonDisabled() { - let productIsAvailableForOrder = window.productAvailableForOrder || false; - let productAllowBuyWhenOutOfStock = window.allowBuyWhenOutOfStock || false; - let productQuantityAvailable = window.quantityAvailable || 0; - let productMinimalQuantity = window.minimalQuantity || 0; - let productQuantityWantedElement = document.querySelector('#quantity_wanted'); - let productQuantityWanted = 0; - - if (productQuantityWantedElement) { - productQuantityWanted = parseInt(productQuantityWantedElement.value) || 0; - } - - return !productIsAvailableForOrder - || (!productAllowBuyWhenOutOfStock && (productQuantityAvailable <= 0 || productQuantityWanted > productQuantityAvailable)) - || productQuantityWanted < productMinimalQuantity; - } - - static onUpdatedCart() {} - - static onUpdatedProduct() {} - - static onUpdatePaymentMethods(listener) { - if (window['updatePaymentMethods']) { - const updatePaymentMethods = window['updatePaymentMethods']; - window['updatePaymentMethods'] = (...args) => { - updatePaymentMethods(...args); - listener(...args); - }; - } - } - - static onUpdatedShoppingCartExtra(listener) { - if (window['updateHookShoppingCartExtra']) { - const updateHookShoppingCartExtra = window['updateHookShoppingCartExtra']; - window['updateHookShoppingCartExtra'] = (...args) => { - updateHookShoppingCartExtra(...args); - listener(...args); - }; - } - } -} diff --git a/_dev/js/front/src/service/prestashop.service/prestashop-ps1_7.service.js b/_dev/js/front/src/service/prestashop.service/prestashop-ps1_7.service.js deleted file mode 100644 index 47ee04ec7..000000000 --- a/_dev/js/front/src/service/prestashop.service/prestashop-ps1_7.service.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export class PrestashopPs1_7Service { - static getProductDetails() { - const productDetails = document.getElementById('product-details'); - - if (!productDetails || !productDetails.dataset || !productDetails.dataset.product) { - throw new Error('Unable to retrieve product details from DOM: document.getElementById("product-details").dataset.product'); - } - - return JSON.parse( - productDetails.dataset.product - ); - } - - static isHomePage() { - return document.body.id === 'index'; - } - - static isCategoryPage() { - return document.body.id === 'category'; - } - - static isCartPage() { - return document.body.id === 'cart'; - } - - static isOrderPaymentStepPage() { - if (document.body.id !== 'checkout') return false; - return document.querySelector('[data-module-name^="ps_checkout"]'); - } - - static isOrderPage() { - return document.body.id === 'checkout'; - } - - static isNativeOnePageCheckoutPage() { - return false; // This doesn't exist in PrestaShop 1.7 - } - - static isOrderPersonalInformationStepPage() { - if (document.body.id !== 'checkout') return false; - const step = document.querySelector('#checkout-personal-information-step'); - - return step && (step.classList.contains('-current') || step.classList.contains('step--current')); - } - - static isIframeProductPage() { - return false; - } - - static isProductPage() { - return document.body.id === 'product'; - } - - static isLogged() { - return window.prestashop?.customer?.is_logged || false; - } - - static isGuestCheckoutEnabled() { - return !!document.querySelector('#checkout-guest-form'); - } - - static hasProductInCart() { - return !!window.ps_checkoutCartProductCount; - } - - static displayPricesTaxIncluded() { - return window.prestashop?.configuration?.display_prices_tax_incl || false; - } - - static displayTaxLabel() { - return window.prestashop?.configuration?.display_taxes_label || false; - } - - static getCartAmount() { - let cartAmount = window.prestashop?.cart?.totals?.total?.amount || ''; - - if (window.prestashop?.cart?.totals?.total_excluding_tax?.amount && !this.displayPricesTaxIncluded() && !this.displayTaxLabel()) { - cartAmount = window.prestashop?.cart?.totals?.total_excluding_tax?.amount; - } - - if (window.prestashop?.cart?.totals?.total_including_tax?.amount && (this.displayPricesTaxIncluded() || this.displayTaxLabel())) { - cartAmount = window.prestashop?.cart?.totals?.total_including_tax?.amount; - } - - return cartAmount; - } - - static getProductPrice() { - let productPrice = document.querySelector('.current-price .current-price-value'); - - if (!productPrice) { - productPrice = document.querySelector('.current-price [itemprop="price"]'); - } - - if (productPrice) { - return productPrice.getAttribute('content'); - } - - return ''; - } - - static isAddToCartButtonDisabled() { - let addToCartElement = document.querySelector('.page-product:not(.modal-open) .row .product-add-to-cart, .page-product:not(.modal-open) .product-container .product-add-to-cart, .page-product:not(.modal-open) .row .js-product-add-to-cart, .page-product:not(.modal-open) .product-container .js-product-add-to-cart'); - let addToCartButtonElement = addToCartElement.querySelector('button.add-to-cart'); - - return addToCartButtonElement ? addToCartButtonElement.disabled : true; - } - - static onUpdatedCart(listener) { - if (window['prestashop'] && window['prestashop'].on) { - window['prestashop'].on('updatedCart', listener); - window['prestashop'].on('updatedAddressForm', listener); - window['prestashop'].on('updatedDeliveryForm', listener); - } else { - console.error(''); - } - } - - static onUpdatedProduct(listener) { - if (window['prestashop'] && window['prestashop'].on) { - window['prestashop'].on('updatedProduct', listener); - } else { - console.error(''); - } - } - - static onUpdatePaymentMethods() {} - - static onUpdatedShoppingCartExtra() {} -} diff --git a/_dev/js/front/src/service/query-selector.service.spec.js b/_dev/js/front/src/service/query-selector.service.spec.js deleted file mode 100644 index 21280c9cb..000000000 --- a/_dev/js/front/src/service/query-selector.service.spec.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { QuerySelectorService } from './query-selector.service'; -import { PrestashopService } from './prestashop.service'; - -function buildDIContainerMock() { - return { - container: { - PrestashopService: new PrestashopService() - } - }; -} - -describe('src/service/query-selector.service.spec.js', () => { - const testAllQSSMethods = (qss) => { - expect(() => qss.getBasePaymentConfirmation()).not.toThrow(); - expect(() => qss.getConditionsCheckboxes()).not.toThrow(); - expect(() => qss.getLoaderParent()).not.toThrow(); - expect(() => qss.getNotificationConditions()).not.toThrow(); - expect(() => qss.getNotificationPaymentCanceled()).not.toThrow(); - expect(() => qss.getNotificationPaymentError()).not.toThrow(); - expect(() => qss.getNotificationPaymentErrorText()).not.toThrow(); - expect(() => qss.getPaymentOptions()).not.toThrow(); - expect(() => qss.getPaymentOptionsLoader()).not.toThrow(); - expect(() => qss.getPaymentOptionRadios()).not.toThrow(); - }; - - test('All methods are defined for PS1.6', () => { - const qss = new QuerySelectorService(buildDIContainerMock()); - testAllQSSMethods(qss); - }); - - test('All methods are defined for PS1.7', () => { - window.prestashop = {}; - - const qss = new QuerySelectorService(buildDIContainerMock()); - testAllQSSMethods(qss); - - delete window.prestashop; - }); -}); diff --git a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_6.js b/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_6.js deleted file mode 100644 index 6692bbdc1..000000000 --- a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_6.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const DefaultSelectors1_6 = { - BASE_PAYMENT_CONFIRMATION: '#ps_checkout-express-checkout-submit-button', - - CONDITIONS_CHECKBOXES: 'input[name="cgv"]', - - LOADER_PARENT: 'body', - - NOTIFICATION_CONDITIONS: '.accept-cgv', - NOTIFICATION_PAYMENT_CANCELLED: '#ps_checkout-canceled', - NOTIFICATION_PAYMENT_ERROR: '#ps_checkout-error', - NOTIFICATION_PAYMENT_ERROR_TEXT: '#ps_checkout-error-text', - - PAYMENT_OPTIONS: '.payment-options', - PAYMENT_OPTIONS_LOADER: '#ps_checkout-loader', - PAYMENT_OPTION_RADIOS: - '.payment-options input[type="radio"][name="payment-option"]', - - EXPRESS_CHECKOUT_CONTAINER_PRODUCT_PAGE: - 'body.product .box-cart-bottom .buttons_bottom_block', - EXPRESS_CHECKOUT_CONTAINER_CART_PAGE: 'body.order .cart_navigation_extra', - EXPRESS_CHECKOUT_CONTAINER_CHECKOUT_PAGE: - 'body.authentication #create-account_form, body.order-opc #opc_account_choice:not([style*="display: none"]) .opc-button, body.order-opc #opc_account_form:not([style*="display: none"])', - - PAY_LATER_OFFER_MESSAGE_CONTAINER_PRODUCT: '.content_prices', - PAY_LATER_OFFER_MESSAGE_CONTAINER_CART_SUMMARY: '#total_price_container', - - PAY_LATER_BANNER_CONTAINER: '.header-container', - - CARD_FIELDS: { - FORM: '#ps_checkout-card-fields-form', - NAME: '#ps_checkout-card-fields-card-name', - NUMBER: '#ps_checkout-card-fields-card-number', - EXPIRY: '#ps_checkout-card-fields-card-expiry', - CVV: '#ps_checkout-card-fields-card-cvv', - NAME_ERROR: '#ps_checkout-card-fields-card-name-error', - NUMBER_ERROR: '#ps_checkout-card-fields-card-number-error', - VENDOR_ERROR: '#ps_checkout-card-fields-card-vendor-error', - EXPIRY_ERROR: '#ps_checkout-card-fields-card-expiry-error', - CVV_ERROR: '#ps_checkout-card-fields-card-cvv-error', - }, - - PAYMENT_METHOD_LOGO_PRODUCT_CONTAINER: 'body.product .box-cart-bottom .buttons_bottom_block', - PAYMENT_METHOD_LOGO_CART_CONTAINER: 'body.order .cart_navigation_extra' -}; diff --git a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7-hummingbird.js b/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7-hummingbird.js deleted file mode 100644 index 7547c47aa..000000000 --- a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7-hummingbird.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const DefaultSelectors1_7Hummingbird = { - BASE_PAYMENT_CONFIRMATION: '#payment-confirmation [type="submit"]', - - CONDITIONS_CHECKBOXES: '#conditions-to-approve input[type="checkbox"]', - - LOADER_PARENT: 'body', - - NOTIFICATION_CONDITIONS: '.accept-cgv', - NOTIFICATION_PAYMENT_CANCELLED: '#ps_checkout-canceled', - NOTIFICATION_PAYMENT_ERROR: '#ps_checkout-error', - NOTIFICATION_PAYMENT_ERROR_TEXT: '#ps_checkout-error-text', - - PAYMENT_OPTIONS: '.payment__list', - PAYMENT_OPTIONS_LOADER: '#ps_checkout-loader', - PAYMENT_OPTION_RADIOS: - '.payment__list input[type="radio"][name="payment-option"]', - - EXPRESS_CHECKOUT_CONTAINER_PRODUCT_PAGE: - '#product .product__add-to-cart .product__minimal-quantity', - EXPRESS_CHECKOUT_CONTAINER_CART_PAGE: - '#cart .cart-summary .cart-detailed__actions', - EXPRESS_CHECKOUT_CONTAINER_CHECKOUT_PAGE: - '#checkout-personal-information-step .step__content', - - PAY_LATER_OFFER_MESSAGE_CONTAINER_PRODUCT: '.product__prices', - PAY_LATER_OFFER_MESSAGE_CONTAINER_CART_SUMMARY: '.cart-summary__totals', - - PAY_LATER_BANNER_CONTAINER: '#notifications .container', - - CARD_FIELDS: { - FORM: '#ps_checkout-card-fields-form', - NAME: '#ps_checkout-card-fields-name', - NUMBER: '#ps_checkout-card-fields-number', - EXPIRY: '#ps_checkout-card-fields-expiry', - CVV: '#ps_checkout-card-fields-cvv', - NAME_ERROR: '#ps_checkout-card-fields-name-error', - NUMBER_ERROR: '#ps_checkout-card-fields-number-error', - VENDOR_ERROR: '#ps_checkout-card-fields-vendor-error', - EXPIRY_ERROR: '#ps_checkout-card-fields-expiry-error', - CVV_ERROR: '#ps_checkout-card-fields-cvv-error', - }, - - PAYMENT_METHOD_LOGO_PRODUCT_CONTAINER: '#product .product__add-to-cart', - PAYMENT_METHOD_LOGO_CART_CONTAINER: '#cart .cart-summary .cart-detailed__actions' -}; diff --git a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7.js b/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7.js deleted file mode 100644 index fe82e8186..000000000 --- a/_dev/js/front/src/service/query-selector.service/default-selectors/default-selectors-ps1_7.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const DefaultSelectors1_7 = { - BASE_PAYMENT_CONFIRMATION: '#payment-confirmation [type="submit"]', - - CONDITIONS_CHECKBOXES: '#conditions-to-approve input[type="checkbox"]', - - LOADER_PARENT: 'body', - - NOTIFICATION_CONDITIONS: '.accept-cgv', - NOTIFICATION_PAYMENT_CANCELLED: '#ps_checkout-canceled', - NOTIFICATION_PAYMENT_ERROR: '#ps_checkout-error', - NOTIFICATION_PAYMENT_ERROR_TEXT: '#ps_checkout-error-text', - - PAYMENT_OPTIONS: '.payment-options', - PAYMENT_OPTIONS_LOADER: '#ps_checkout-loader', - PAYMENT_OPTION_RADIOS: - '.payment-options input[type="radio"][name="payment-option"]', - - EXPRESS_CHECKOUT_CONTAINER_PRODUCT_PAGE: - '#product .product-add-to-cart .product-quantity', - EXPRESS_CHECKOUT_CONTAINER_CART_PAGE: - '#cart .cart-summary .cart-detailed-actions', - EXPRESS_CHECKOUT_CONTAINER_CHECKOUT_PAGE: - '#checkout-personal-information-step .content', - - PAY_LATER_OFFER_MESSAGE_CONTAINER_PRODUCT: '.product-prices', - PAY_LATER_OFFER_MESSAGE_CONTAINER_CART_SUMMARY: '.cart-summary-totals', - - PAY_LATER_BANNER_CONTAINER: '#notifications .container', - - CARD_FIELDS: { - FORM: '#ps_checkout-card-fields-form', - NAME: '#ps_checkout-card-fields-name', - NUMBER: '#ps_checkout-card-fields-number', - EXPIRY: '#ps_checkout-card-fields-expiry', - CVV: '#ps_checkout-card-fields-cvv', - NAME_ERROR: '#ps_checkout-card-fields-name-error', - NUMBER_ERROR: '#ps_checkout-card-fields-number-error', - VENDOR_ERROR: '#ps_checkout-card-fields-vendor-error', - EXPIRY_ERROR: '#ps_checkout-card-fields-expiry-error', - CVV_ERROR: '#ps_checkout-card-fields-cvv-error', - }, - - PAYMENT_METHOD_LOGO_PRODUCT_CONTAINER: '#product .product-add-to-cart', - PAYMENT_METHOD_LOGO_CART_CONTAINER: '#cart .cart-summary .cart-detailed-actions' -}; diff --git a/_dev/js/front/src/service/query-selector.service/index.js b/_dev/js/front/src/service/query-selector.service/index.js deleted file mode 100644 index a1ab9352a..000000000 --- a/_dev/js/front/src/service/query-selector.service/index.js +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { - PS_VERSION_1_6, - PS_VERSION_1_7 -} from '../../constants/ps-version.constants'; -import { BaseClass } from '../../core/dependency-injection/base.class'; - -import { QuerySelectorPs1_6Service } from './query-selector-ps1_6.service'; -import { QuerySelectorPs1_7Service } from './query-selector-ps1_7.service'; - -export class QuerySelectorService extends BaseClass { - static Inject = { - prestashopService: 'PrestashopService' - }; - - constructor(app) { - super(app); - - this.instance = { - [PS_VERSION_1_6]: QuerySelectorPs1_6Service, - [PS_VERSION_1_7]: QuerySelectorPs1_7Service - }[this.prestashopService.getVersion()]; - } - - getBasePaymentConfirmation() { - return this.instance.getBasePaymentConfirmation(); - } - - getConditionsCheckboxes() { - return this.instance.getConditionsCheckboxes(); - } - - getLoaderParent() { - return this.instance.getLoaderParent(); - } - - getNotificationConditions() { - return this.instance.getNotificationConditions(); - } - - getNotificationPaymentCanceled() { - return this.instance.getNotificationPaymentCanceled(); - } - - getNotificationPaymentError() { - return this.instance.getNotificationPaymentError(); - } - - getNotificationPaymentErrorText() { - return this.instance.getNotificationPaymentErrorText(); - } - - getPaymentOptions() { - return this.instance.getPaymentOptions(); - } - - getPaymentOptionsLoader() { - return this.instance.getPaymentOptionsLoader(); - } - - getPaymentOptionRadios() { - return this.instance.getPaymentOptionRadios(); - } - - getExpressCheckoutButtonContainerCart() { - return this.instance.getExpressCheckoutButtonContainerCart(); - } - - getExpressCheckoutButtonContainerCheckout() { - return this.instance.getExpressCheckoutButtonContainerCheckout(); - } - - getExpressCheckoutButtonContainerProduct() { - return this.instance.getExpressCheckoutButtonContainerProduct(); - } - - getPayLaterOfferMessageContainerSelector(placement) { - return this.instance.getPayLaterOfferMessageContainerSelector(placement); - } - - getPayLaterOfferBannerContainerSelector(placement) { - return this.instance.getPayLaterOfferBannerContainerSelector(placement); - } - - getCardFieldsFormContainer() { - return this.instance.getCardFieldsFormContainer(); - } - - getCardFieldsNameInputContainer() { - return this.instance.getCardFieldsNameInputContainer(); - } - - getCardFieldsNameError() { - return this.instance.getCardFieldsNameError(); - - } - - getCardFieldsNumberInputContainer() { - return this.instance.getCardFieldsNumberInputContainer(); - } - - getCardFieldsNumberError() { - return this.instance.getCardFieldsNumberError(); - } - - getCardFieldsVendorError() { - return this.instance.getCardFieldsVendorError(); - } - - getCardFieldsExpiryInputContainer() { - return this.instance.getCardFieldsExpiryInputContainer(); - } - - getCardFieldsExpiryError() { - return this.instance.getCardFieldsExpiryError(); - } - - getCardFieldsCvvInputContainer() { - return this.instance.getCardFieldsCvvInputContainer(); - } - - getCardFieldsCvvError() { - return this.instance.getCardFieldsCvvError(); - } - - getPaymentMethodLogoContainer(placement) { - return this.instance.getPaymentMethodLogoContainer(placement); - } -} diff --git a/_dev/js/front/src/service/query-selector.service/query-selector-ps1_6.service.js b/_dev/js/front/src/service/query-selector.service/query-selector-ps1_6.service.js deleted file mode 100644 index 1f302587b..000000000 --- a/_dev/js/front/src/service/query-selector.service/query-selector-ps1_6.service.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { DefaultSelectors1_6 } from './default-selectors/default-selectors-ps1_6'; - -const SELECTORS = { - ...DefaultSelectors1_6, - ...(window.ps_checkout.selectors || {}) -}; - -export class QuerySelectorPs1_6Service { - static getBasePaymentConfirmation() { - return this.querySelector(SELECTORS.BASE_PAYMENT_CONFIRMATION); - } - - static getConditionsCheckboxes() { - return this.querySelectorAll(SELECTORS.CONDITIONS_CHECKBOXES); - } - - static getLoaderParent() { - return this.querySelector(SELECTORS.LOADER_PARENT); - } - - static getNotificationConditions() { - return this.querySelector(SELECTORS.NOTIFICATION_CONDITIONS); - } - - static getNotificationPaymentCanceled() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_CANCELLED); - } - - static getNotificationPaymentError() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_ERROR); - } - - static getNotificationPaymentErrorText() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_ERROR_TEXT); - } - - static getPaymentOptions() { - return this.querySelector(SELECTORS.PAYMENT_OPTIONS); - } - - static getPaymentOptionsLoader() { - return this.querySelector(SELECTORS.PAYMENT_OPTIONS_LOADER); - } - - static getPaymentOptionRadios() { - return this.querySelectorAll(SELECTORS.PAYMENT_OPTION_RADIOS); - } - - static getExpressCheckoutButtonContainerCart() { - return this.querySelector(SELECTORS.EXPRESS_CHECKOUT_CONTAINER_CART_PAGE); - } - - static getExpressCheckoutButtonContainerCheckout() { - return this.querySelector( - SELECTORS.EXPRESS_CHECKOUT_CONTAINER_CHECKOUT_PAGE - ); - } - - static getExpressCheckoutButtonContainerProduct() { - return this.querySelector( - SELECTORS.EXPRESS_CHECKOUT_CONTAINER_PRODUCT_PAGE - ); - } - - static getCardFieldsFormContainer() { - return this.querySelector(SELECTORS.CARD_FIELDS.FORM); - } - - static getCardFieldsNameInputContainer() { - return this.querySelector(SELECTORS.CARD_FIELDS.NAME); - } - - static getCardFieldsNameError() { - return this.querySelector(SELECTORS.CARD_FIELDS.NAME_ERROR); - } - - static getCardFieldsNumberInputContainer() { - return this.querySelector(SELECTORS.CARD_FIELDS.NUMBER); - } - - static getCardFieldsNumberError() { - return this.querySelector(SELECTORS.CARD_FIELDS.NUMBER_ERROR); - } - - static getCardFieldsVendorError() { - return this.querySelector(SELECTORS.CARD_FIELDS.VENDOR_ERROR); - } - - static getCardFieldsExpiryInputContainer() { - return this.querySelector(SELECTORS.CARD_FIELDS.EXPIRY); - } - - static getCardFieldsExpiryError() { - return this.querySelector(SELECTORS.CARD_FIELDS.EXPIRY_ERROR); - } - - static getCardFieldsCvvInputContainer() { - return this.querySelector(SELECTORS.CARD_FIELDS.CVV); - } - - static getCardFieldsCvvError() { - return this.querySelector(SELECTORS.CARD_FIELDS.CVV_ERROR); - } - - static getPayLaterOfferMessageContainerSelector(placement) { - switch (placement) { - case 'product': - return this.querySelector( - SELECTORS.PAY_LATER_OFFER_MESSAGE_CONTAINER_PRODUCT - ); - case 'cart': - case 'payment': - return this.querySelector( - SELECTORS.PAY_LATER_OFFER_MESSAGE_CONTAINER_CART_SUMMARY - ); - default: - return; - } - } - - static getPayLaterOfferBannerContainerSelector(placement) { - switch (placement) { - case 'product': - case 'cart': - case 'home': - case 'payment': - case 'category': - return this.querySelector(SELECTORS.PAY_LATER_BANNER_CONTAINER); - default: - return; - } - } - - static querySelector(selector) { - let element = document.querySelector(selector); - - if (!element) { - console.error('HTMLElement selector ' + selector + ' not found.'); - } - - return element; - } - - static querySelectorAll(selector) { - const elements = [...document.querySelectorAll(selector)]; - - if (elements.length === 0) { - console.error(`HTMLElement selector ${selector} not found.`); - } - - return elements; - } - - static getPaymentMethodLogoContainer(placement) { - switch (placement) { - case 'product': - return document.querySelector( - SELECTORS.PAYMENT_METHOD_LOGO_PRODUCT_CONTAINER - ); - case 'cart': - return document.querySelector( - SELECTORS.PAYMENT_METHOD_LOGO_CART_CONTAINER - ); - default: - return; - } - } -} diff --git a/_dev/js/front/src/service/query-selector.service/query-selector-ps1_7.service.js b/_dev/js/front/src/service/query-selector.service/query-selector-ps1_7.service.js deleted file mode 100644 index 5fb7a1bab..000000000 --- a/_dev/js/front/src/service/query-selector.service/query-selector-ps1_7.service.js +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { DefaultSelectors1_7 } from './default-selectors/default-selectors-ps1_7'; -import { DefaultSelectors1_7Hummingbird } from './default-selectors/default-selectors-ps1_7-hummingbird'; - -const isThemeHummingbird = document.querySelector('body>main#wrapper') !== null; - -const SELECTORS = { - ...(isThemeHummingbird ? DefaultSelectors1_7Hummingbird : DefaultSelectors1_7), - ...(window.ps_checkout.selectors || {}) -}; - -export class QuerySelectorPs1_7Service { - static getBasePaymentConfirmation() { - return this.querySelector(SELECTORS.BASE_PAYMENT_CONFIRMATION); - } - - static getConditionsCheckboxes() { - return this.querySelectorAll(SELECTORS.CONDITIONS_CHECKBOXES); - } - - static getLoaderParent() { - return this.querySelector(SELECTORS.LOADER_PARENT); - } - - static getNotificationConditions() { - return this.querySelector(SELECTORS.NOTIFICATION_CONDITIONS); - } - - static getNotificationPaymentCanceled() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_CANCELLED); - } - - static getNotificationPaymentError() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_ERROR); - } - - static getNotificationPaymentErrorText() { - return this.querySelector(SELECTORS.NOTIFICATION_PAYMENT_ERROR_TEXT); - } - - static getPaymentOptions() { - return this.querySelector(SELECTORS.PAYMENT_OPTIONS); - } - - static getPaymentOptionsLoader() { - return this.querySelector(SELECTORS.PAYMENT_OPTIONS_LOADER); - } - - static getPaymentOptionRadios() { - return this.querySelectorAll(SELECTORS.PAYMENT_OPTION_RADIOS); - } - - static getExpressCheckoutButtonContainerCart() { - return this.querySelector( - SELECTORS.EXPRESS_CHECKOUT_CONTAINER_CART_PAGE - ); - } - - static getExpressCheckoutButtonContainerCheckout() { - return this.querySelector( - SELECTORS.EXPRESS_CHECKOUT_CONTAINER_CHECKOUT_PAGE - ); - } - - static getExpressCheckoutButtonContainerProduct() { - return this.querySelector( - SELECTORS.EXPRESS_CHECKOUT_CONTAINER_PRODUCT_PAGE - ); - } - - static getCardFieldsFormContainer() { - return this.querySelector( - SELECTORS.CARD_FIELDS.FORM - ); - } - static getCardFieldsNameInputContainer() { - return this.querySelector( - SELECTORS.CARD_FIELDS.NAME - ); - } - - static getCardFieldsNameError() { - return this.querySelector( - SELECTORS.CARD_FIELDS.NAME_ERROR - ); - } - - static getCardFieldsNumberInputContainer() { - return this.querySelector( - SELECTORS.CARD_FIELDS.NUMBER - ); - } - - static getCardFieldsNumberError() { - return this.querySelector( - SELECTORS.CARD_FIELDS.NUMBER_ERROR - ); - } - - static getCardFieldsVendorError() { - return this.querySelector( - SELECTORS.CARD_FIELDS.VENDOR_ERROR - ); - } - - static getCardFieldsExpiryInputContainer() { - return this.querySelector( - SELECTORS.CARD_FIELDS.EXPIRY - ); - } - - static getCardFieldsExpiryError() { - return this.querySelector( - SELECTORS.CARD_FIELDS.EXPIRY_ERROR - ); - } - - static getCardFieldsCvvInputContainer() { - return this.querySelector( - SELECTORS.CARD_FIELDS.CVV - ); - } - - static getCardFieldsCvvError() { - return this.querySelector( - SELECTORS.CARD_FIELDS.CVV_ERROR - ); - } - - static getPayLaterOfferMessageContainerSelector(placement) { - switch (placement) { - case 'product': - return this.querySelector(SELECTORS.PAY_LATER_OFFER_MESSAGE_CONTAINER_PRODUCT); - case 'cart': - case 'order': - return this.querySelector(SELECTORS.PAY_LATER_OFFER_MESSAGE_CONTAINER_CART_SUMMARY); - default: - return; - } - } - - static getPayLaterOfferBannerContainerSelector(placement) { - switch (placement) { - case 'product': - case 'cart': - case 'home': - case 'order': - case 'category': - return this.querySelector(SELECTORS.PAY_LATER_BANNER_CONTAINER); - default: - return; - } - } - - static querySelector(selector) { - let element = document.querySelector(selector); - - if (!element) { - console.error('HTMLElement selector ' + selector + ' not found.'); - } - - return element; - } - - static querySelectorAll(selector) { - const elements = [...document.querySelectorAll(selector)]; - - if (elements.length === 0) { - console.error(`HTMLElement selector ${selector} not found.`); - } - - return elements; - } - - static getPaymentMethodLogoContainer(placement) { - switch (placement) { - case 'product': - return document.querySelector(SELECTORS.PAYMENT_METHOD_LOGO_PRODUCT_CONTAINER); - case 'cart': - return document.querySelector(SELECTORS.PAYMENT_METHOD_LOGO_CART_CONTAINER); - default: - return; - } - } -} diff --git a/_dev/js/front/src/service/translation.service.js b/_dev/js/front/src/service/translation.service.js deleted file mode 100644 index e553db521..000000000 --- a/_dev/js/front/src/service/translation.service.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseClass } from '../core/dependency-injection/base.class'; - -export class TranslationService extends BaseClass { - static Inject = { - config: 'PsCheckoutConfig' - }; - - constructor(app) { - super(app); - this.translationMap = this.config.translations; - } - - getTranslationString(id) { - return this.translationMap[id] || `TRANSLATED_STRING(${id})`; - } -} diff --git a/_dev/js/front/src/service/translation.service.spec.js b/_dev/js/front/src/service/translation.service.spec.js deleted file mode 100644 index 4eee96eed..000000000 --- a/_dev/js/front/src/service/translation.service.spec.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { PsCheckoutConfig } from '../config/ps-checkout.config'; -import { TranslationService } from './translation.service'; - -function buildDIContainerMock() { - return { - container: { - PsCheckoutConfig: { - ...PsCheckoutConfig, - translations: { - foo: 'Foo', - bar: 'Bar' - } - } - } - }; -} - -describe('src/service/translation.service.spec.js', () => { - test('::getTranslationString() with existing id', async () => { - const diContainer = buildDIContainerMock(); - const service = new TranslationService(diContainer); - - expect(service.getTranslationString('foo')).toBe('Foo'); - expect(service.getTranslationString('bar')).toBe('Bar'); - }); - - test('::getTranslationString() with missing id', async () => { - const diContainer = buildDIContainerMock(); - const service = new TranslationService(diContainer); - - expect(service.getTranslationString('baz')).toBe('TRANSLATED_STRING(baz)'); - }); -}); diff --git a/_dev/js/front/src/utils/dependency-injection/inject.js b/_dev/js/front/src/utils/dependency-injection/inject.js deleted file mode 100644 index b9e9348fc..000000000 --- a/_dev/js/front/src/utils/dependency-injection/inject.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * @param cls - * @return {function(AppAwareClass, *=): (void)} - */ -export function inject(cls) { - /** - * @param {AppAwareClass} instance - * @param constructor - * - * @return void - */ - const injector = (instance, constructor) => { - if (constructor === cls) return; - injector(instance, Object.getPrototypeOf(constructor)); - - const container = instance.app.container; - const services = constructor.Inject || {}; - - for (const alias of Object.keys(services)) { - const name = services[alias]; - instance[alias] = container[name]; - } - }; - - return injector; -} diff --git a/_dev/js/front/src/utils/dependency-injection/inject.spec.js b/_dev/js/front/src/utils/dependency-injection/inject.spec.js deleted file mode 100644 index af180c513..000000000 --- a/_dev/js/front/src/utils/dependency-injection/inject.spec.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import { BaseClass } from '../../core/dependency-injection/base.class'; - -import { DI_CONTAINER } from '../../../test/mocks/di-container.mock'; - -describe('src/utils/dependency-injection/inject.spec.js', () => { - test('No injection', () => { - let cls = class extends BaseClass {}; - expect(() => new cls(DI_CONTAINER)).not.toThrow(); - }); - - test('Single service injection with one level of inheritance', () => { - let cls = class extends BaseClass { - static Inject = { - foo: 'ServiceFoo' - }; - }; - - let instance = new cls(DI_CONTAINER); - expect(instance.foo).toBe('Foo'); - }); - - test('Multiple service injection with one level of inheritance', () => { - let cls = class extends BaseClass { - static Inject = { - foo: 'ServiceFoo', - bar: 'ServiceBar', - baz: 'ServiceBaz' - }; - }; - - let instance = new cls(DI_CONTAINER); - expect(instance.foo).toBe('Foo'); - expect(instance.bar).toBe('Bar'); - expect(instance.baz).toBe('Baz'); - }); - - test('Multiple service injection with multiple level of inheritance', () => { - let cls1 = class extends BaseClass { - static Inject = { - foo: 'ServiceFoo' - }; - }; - - let cls2 = class extends cls1 { - static Inject = { - bar: 'ServiceBar', - baz: 'ServiceBaz' - }; - }; - - let instance = new cls2(DI_CONTAINER); - expect(instance.foo).toBe('Foo'); - expect(instance.bar).toBe('Bar'); - expect(instance.baz).toBe('Baz'); - }); -}); diff --git a/_dev/js/front/src/utils/extra/types/app-aware.typedef.doc.js b/_dev/js/front/src/utils/extra/types/app-aware.typedef.doc.js deleted file mode 100644 index b7e7455c9..000000000 --- a/_dev/js/front/src/utils/extra/types/app-aware.typedef.doc.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * This file exists only for documentative purposes - */ - -/** - * @typedef AppAwareClass - * - * @property {ContainerAwareClass} app - */ diff --git a/_dev/js/front/src/utils/extra/types/container-aware.typedef.doc.js b/_dev/js/front/src/utils/extra/types/container-aware.typedef.doc.js deleted file mode 100644 index 3312c209c..000000000 --- a/_dev/js/front/src/utils/extra/types/container-aware.typedef.doc.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * This file exists only for documentative purposes - */ - -/* eslint-disable no-unused-vars */ -import Bottle from 'bottlejs'; - -/** - * @typedef ContainerAwareClass - * - * @property {Bottle} bottle - * @property {Bottle.container} container - */ diff --git a/_dev/js/front/src/utils/extra/types/paypal-sdk-config.typedef.doc.js b/_dev/js/front/src/utils/extra/types/paypal-sdk-config.typedef.doc.js deleted file mode 100644 index 90faeee59..000000000 --- a/_dev/js/front/src/utils/extra/types/paypal-sdk-config.typedef.doc.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * This file exists only for documentative purposes - */ - -/** - * @typedef PayPalSdkConfig - * @type {object} - * - * @property {string} id - * @property {string} namespace - * @property {string} src - * @property {string} card3dsEnabled - * @property {string} cspNonce - * @property {string} orderId - * @property {string} clientToken - */ diff --git a/_dev/js/front/src/utils/extra/types/paypal-sdk.typedef.doc.js b/_dev/js/front/src/utils/extra/types/paypal-sdk.typedef.doc.js deleted file mode 100644 index 75dbdfaed..000000000 --- a/_dev/js/front/src/utils/extra/types/paypal-sdk.typedef.doc.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * This file exists only for documentative purposes - */ - -/** - * @typedef PayPalCardField - * - * @property {function} addClass - * @property {function} clear - * @property {function} focus - * @property {function} removeAttribute - * @property {function} removeClass - * @property {function} render - * @property {function} setAttribute - * @property {function} setMessage - */ - -/** - * @typedef PayPalSdk - * @type {object} - * - * @property {string} version - * @property {string[]} FUNDING - * @property {function} getCorrelationID - * @property {function} getFundingSources - * @property {function} isFundingEligible - * @property {function} rememberFunding - * @property {object} Buttons - * @property {function} Buttons.isEligible - * @property {function} Buttons.render - * @property {object} Marks - * @property {function} Marks.isEligible - * @property {function} Marks.render - * @property {object} HostedFields - * @property {object} CardFields - * @property {PayPalCardField} CardFields.CVVField - * @property {PayPalCardField} CardFields.ExpiryField - * @property {PayPalCardField} CardFields.NameField - * @property {PayPalCardField} CardFields.NumberField - * @property {function} CardFields.getState - * @property {function} CardFields.isEligible - * @property {function} CardFields.submit - * @property {function} HostedFields.isEligible - * @property {function} HostedFields.render - * @property {object} Messages - * @property {function} Messages.render - */ diff --git a/_dev/js/front/src/utils/globals/index.js b/_dev/js/front/src/utils/globals/index.js deleted file mode 100644 index eae76a819..000000000 --- a/_dev/js/front/src/utils/globals/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -window.ps_checkout = window.ps_checkout || {}; - -window.ps_checkout.app = window.ps_checkout.app || null; - -window.ps_checkout.config = window.ps_checkout.config || {}; -window.ps_checkout.selectors = window.ps_checkout.selectors || {}; - -window.ps_checkout.events = window.ps_checkout.events || new EventTarget(); - -window.ps_checkout.version = - window.ps_checkout.version || window.ps_checkoutVersion; diff --git a/_dev/js/front/src/utils/polyfills/event-target.js b/_dev/js/front/src/utils/polyfills/event-target.js deleted file mode 100644 index 569ab094c..000000000 --- a/_dev/js/front/src/utils/polyfills/event-target.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import EventTarget from '@ungap/event-target'; - -window.EventTarget = EventTarget; diff --git a/_dev/js/front/src/utils/polyfills/index.js b/_dev/js/front/src/utils/polyfills/index.js deleted file mode 100644 index 94ff5245b..000000000 --- a/_dev/js/front/src/utils/polyfills/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -import 'classlist-polyfill'; -import 'core-js/stable'; -import 'promise-polyfill/src/polyfill'; -import 'regenerator-runtime/runtime'; -import 'url-polyfill'; -import 'whatwg-fetch'; - -import './event-target'; -import './web-api.child-node.remove'; -import './web-api.child-node.replace-with'; -import './web-api.parent-node.append'; -import './web-api.parent-node.prepend'; diff --git a/_dev/js/front/src/utils/polyfills/web-api.child-node.remove.js b/_dev/js/front/src/utils/polyfills/web-api.child-node.remove.js deleted file mode 100644 index 68e037735..000000000 --- a/_dev/js/front/src/utils/polyfills/web-api.child-node.remove.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * Polyfill .remove() - * https://developer.mozilla.org/es/docs/Web/API/ChildNode/remove#Polyfill - */ -(function (arr) { - arr.forEach(function (item) { - // eslint-disable-next-line no-prototype-builtins - if (item.hasOwnProperty('remove')) { - return; - } - Object.defineProperty(item, 'remove', { - configurable: true, - enumerable: true, - writable: true, - value: function remove() { - if (this.parentNode !== null) this.parentNode.removeChild(this); - } - }); - }); -})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); diff --git a/_dev/js/front/src/utils/polyfills/web-api.child-node.replace-with.js b/_dev/js/front/src/utils/polyfills/web-api.child-node.replace-with.js deleted file mode 100644 index 30e64b8c6..000000000 --- a/_dev/js/front/src/utils/polyfills/web-api.child-node.replace-with.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * Polyfill .replaceWith() - * https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/replaceWith - */ -function ReplaceWithPolyfill() { - 'use-strict'; // For safari, and IE > 10 - var parent = this.parentNode, - i = arguments.length, - currentNode; - if (!parent) return; - if (!i) - // if there are no arguments - parent.removeChild(this); - while (i--) { - // i-- decrements i and returns the value of i before the decrement - currentNode = arguments[i]; - if (typeof currentNode !== 'object') { - currentNode = this.ownerDocument.createTextNode(currentNode); - } else if (currentNode.parentNode) { - currentNode.parentNode.removeChild(currentNode); - } - // the value of "i" below is after the decrement - if (!i) - // if currentNode is the first argument (currentNode === arguments[0]) - parent.replaceChild(currentNode, this); - // if currentNode isn't the first - else parent.insertBefore(currentNode, this.nextSibling); - } -} -if (!Element.prototype.replaceWith) - Element.prototype.replaceWith = ReplaceWithPolyfill; -if (!CharacterData.prototype.replaceWith) - CharacterData.prototype.replaceWith = ReplaceWithPolyfill; -if (!DocumentType.prototype.replaceWith) - DocumentType.prototype.replaceWith = ReplaceWithPolyfill; diff --git a/_dev/js/front/src/utils/polyfills/web-api.parent-node.append.js b/_dev/js/front/src/utils/polyfills/web-api.parent-node.append.js deleted file mode 100644 index cca0f48fc..000000000 --- a/_dev/js/front/src/utils/polyfills/web-api.parent-node.append.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * Polyfill .append() - * https://developer.mozilla.org/es/docs/Web/API/ParentNode/append#Polyfill - */ -(function (arr) { - arr.forEach(function (item) { - // eslint-disable-next-line no-prototype-builtins - if (item.hasOwnProperty('append')) { - return; - } - Object.defineProperty(item, 'append', { - configurable: true, - enumerable: true, - writable: true, - value: function append() { - var argArr = Array.prototype.slice.call(arguments), - docFrag = document.createDocumentFragment(); - - argArr.forEach(function (argItem) { - var isNode = argItem instanceof Node; - docFrag.appendChild( - isNode ? argItem : document.createTextNode(String(argItem)) - ); - }); - - this.appendChild(docFrag); - } - }); - }); -})([Element.prototype, Document.prototype, DocumentFragment.prototype]); diff --git a/_dev/js/front/src/utils/polyfills/web-api.parent-node.prepend.js b/_dev/js/front/src/utils/polyfills/web-api.parent-node.prepend.js deleted file mode 100644 index 03855f1f0..000000000 --- a/_dev/js/front/src/utils/polyfills/web-api.parent-node.prepend.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ - -/** - * Polyfill .prepend() - * https://developer.mozilla.org/es/docs/Web/API/ParentNode/append#Polyfill - */ -(function (arr) { - arr.forEach(function (item) { - // eslint-disable-next-line no-prototype-builtins - if (item.hasOwnProperty('prepend')) { - return; - } - Object.defineProperty(item, 'prepend', { - configurable: true, - enumerable: true, - writable: true, - value: function prepend() { - var argArr = Array.prototype.slice.call(arguments), - docFrag = document.createDocumentFragment(); - - argArr.forEach(function (argItem) { - var isNode = argItem instanceof Node; - docFrag.appendChild( - isNode ? argItem : document.createTextNode(String(argItem)) - ); - }); - - this.insertBefore(docFrag, this.firstChild); - } - }); - }); -})([Element.prototype, Document.prototype, DocumentFragment.prototype]); diff --git a/_dev/js/front/test/mocks/api/ps-checkout.api.js b/_dev/js/front/test/mocks/api/ps-checkout.api.js deleted file mode 100644 index 6fd5fc82c..000000000 --- a/_dev/js/front/test/mocks/api/ps-checkout.api.js +++ /dev/null @@ -1 +0,0 @@ -export const PsCheckoutApiMock = {}; diff --git a/_dev/js/front/test/mocks/components/common/hosted-fields.component.mock.js b/_dev/js/front/test/mocks/components/common/hosted-fields.component.mock.js deleted file mode 100644 index 208b9edb7..000000000 --- a/_dev/js/front/test/mocks/components/common/hosted-fields.component.mock.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const HostedFieldsComponentMock = jest.fn(); - -HostedFieldsComponentMock.render = jest.fn(); - -HostedFieldsComponentMock.mockImplementation(() => ({ - render: HostedFieldsComponentMock.render -})); diff --git a/_dev/js/front/test/mocks/components/common/mark.component.mock.js b/_dev/js/front/test/mocks/components/common/mark.component.mock.js deleted file mode 100644 index 3d52484df..000000000 --- a/_dev/js/front/test/mocks/components/common/mark.component.mock.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const MarkComponentMock = jest.fn(); - -MarkComponentMock.render = jest.fn(); - -MarkComponentMock.mockImplementation(() => ({ - render: MarkComponentMock.render -})); diff --git a/_dev/js/front/test/mocks/components/common/payment-fields.component.mock.js b/_dev/js/front/test/mocks/components/common/payment-fields.component.mock.js deleted file mode 100644 index f849675ce..000000000 --- a/_dev/js/front/test/mocks/components/common/payment-fields.component.mock.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const PaymentFieldsComponentMock = jest.fn(); - -PaymentFieldsComponentMock.render = jest.fn(); - -PaymentFieldsComponentMock.mockImplementation(() => ({ - render: PaymentFieldsComponentMock.render -})); diff --git a/_dev/js/front/test/mocks/components/common/smart-button.component.mock.js b/_dev/js/front/test/mocks/components/common/smart-button.component.mock.js deleted file mode 100644 index fe5f1aa1d..000000000 --- a/_dev/js/front/test/mocks/components/common/smart-button.component.mock.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const SmartButtonComponentMock = jest.fn(); - -SmartButtonComponentMock.render = jest.fn(); - -SmartButtonComponentMock.mockImplementation(() => ({ - render: SmartButtonComponentMock.render -})); diff --git a/_dev/js/front/test/mocks/data/product-dataset.json b/_dev/js/front/test/mocks/data/product-dataset.json deleted file mode 100644 index 3061dbccf..000000000 --- a/_dev/js/front/test/mocks/data/product-dataset.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "id_shop_default": "1", - "id_manufacturer": "1", - "id_supplier": "0", - "reference": "demo_1", - "is_virtual": "0", - "delivery_in_stock": "", - "delivery_out_stock": "", - "id_category_default": "4", - "on_sale": "0", - "online_only": "0", - "ecotax": 0, - "minimal_quantity": "1", - "low_stock_threshold": null, - "low_stock_alert": "0", - "price": "0,10\u00a0\u20ac", - "unity": "", - "unit_price_ratio": "0.000000", - "additional_shipping_cost": "0.00", - "customizable": "0", - "text_fields": "0", - "uploadable_files": "0", - "redirect_type": "301-category", - "id_type_redirected": "0", - "available_for_order": "1", - "available_date": null, - "show_condition": "0", - "condition": "new", - "show_price": "1", - "indexed": "1", - "visibility": "both", - "cache_default_attribute": "1", - "advanced_stock_management": "0", - "date_add": "2019-07-12 15:09:17", - "date_upd": "2019-11-27 15:30:41", - "pack_stock_type": "3", - "meta_description": "", - "meta_keywords": "", - "meta_title": "", - "link_rewrite": "hummingbird-printed-t-shirt", - "name": "T-shirt imprim\u00e9 colibri", - "description": "

Symbole de l\u00e9g\u00e8ret\u00e9 et de d\u00e9licatesse, le colibri \u00e9voque la gaiet\u00e9 et la curiosit\u00e9.<\/span> La collection PolyFaune de la marque Studio Design propose des pi\u00e8ces aux coupes basiques et aux visuels color\u00e9s inspir\u00e9s des origamis japonais traditionnels. \u00c0 porter avec un chino ou un jean. Le proc\u00e9d\u00e9 d'impression par sublimation garantit la qualit\u00e9 et la long\u00e9vit\u00e9 des couleurs.<\/span><\/span><\/p>", - "description_short": "

Coupe classique, col rond, manches courtes. T-shirt en coton pima extra-fin \u00e0 fibres longues. <\/span><\/p>", - "available_now": "", - "available_later": "", - "id": 1, - "id_product": 1, - "out_of_stock": 2, - "new": 0, - "id_product_attribute": "1", - "quantity_wanted": 1, - "extraContent": [], - "allow_oosp": 0, - "category": "hommes", - "category_name": "Hommes", - "link": "http:\/\/shop13.webmodule.prestashop.net\/index.php?id_product=1&rewrite=hummingbird-printed-t-shirt&controller=product&id_lang=3", - "attribute_price": 0, - "price_tax_exc": 0.080000000000000002, - "price_without_reduction": 0.12, - "reduction": 0.024, - "specific_prices": { - "id_specific_price": "1", - "id_specific_price_rule": "0", - "id_cart": "0", - "id_product": "1", - "id_shop": "0", - "id_shop_group": "0", - "id_currency": "0", - "id_country": "0", - "id_group": "0", - "id_customer": "0", - "id_product_attribute": "0", - "price": "-1.000000", - "from_quantity": "1", - "reduction": "0.200000", - "reduction_tax": "1", - "reduction_type": "percentage", - "from": "0000-00-00 00:00:00", - "to": "0000-00-00 00:00:00", - "score": "32" - }, - "quantity": 272, - "quantity_all_versions": 2372, - "id_image": "it-default", - "features": [ - { - "name": "Composizioni", - "value": "Cotone", - "id_feature": "1", - "position": "0" - }, - { - "name": "Propri\u00e9t\u00e9", - "value": "Manica corta", - "id_feature": "2", - "position": "1" - } - ], - "attachments": [], - "virtual": 0, - "pack": 0, - "packItems": [], - "nopackprice": 0, - "customization_required": false, - "attributes": { - "1": { - "id_attribute": "1", - "id_attribute_group": "1", - "name": "S", - "group": "Dimensione", - "reference": "demo_1", - "ean13": "", - "isbn": "", - "upc": "" - }, - "2": { - "id_attribute": "8", - "id_attribute_group": "2", - "name": "Bianco", - "group": "Colore", - "reference": "demo_1", - "ean13": "", - "isbn": "", - "upc": "" - } - }, - "rate": 20, - "tax_name": "TVA FR 20%", - "ecotax_rate": 0, - "unit_price": "", - "customizations": { - "fields": [] - }, - "id_customization": 0, - "is_customizable": false, - "show_quantities": true, - "quantity_label": "Articoli", - "quantity_discounts": [], - "customer_group_discount": 0, - "images": [ - { - "bySize": { - "small_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-small_default.jpg", - "width": 98, - "height": 98 - }, - "cart_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-cart_default.jpg", - "width": 125, - "height": 125 - }, - "home_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-home_default.jpg", - "width": 250, - "height": 250 - }, - "medium_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-medium_default.jpg", - "width": 452, - "height": 452 - }, - "large_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-large_default.jpg", - "width": 800, - "height": 800 - } - }, - "small": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-small_default.jpg", - "width": 98, - "height": 98 - }, - "medium": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-home_default.jpg", - "width": 250, - "height": 250 - }, - "large": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-large_default.jpg", - "width": 800, - "height": 800 - }, - "legend": "T-shirt imprim\u00e9 colibri", - "cover": null, - "id_image": "2", - "position": "2", - "associatedVariants": [ - "7", - "1", - "5", - "3" - ] - } - ], - "cover": { - "bySize": { - "small_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-small_default.jpg", - "width": 98, - "height": 98 - }, - "cart_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-cart_default.jpg", - "width": 125, - "height": 125 - }, - "home_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-home_default.jpg", - "width": 250, - "height": 250 - }, - "medium_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-medium_default.jpg", - "width": 452, - "height": 452 - }, - "large_default": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-large_default.jpg", - "width": 800, - "height": 800 - } - }, - "small": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-small_default.jpg", - "width": 98, - "height": 98 - }, - "medium": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-home_default.jpg", - "width": 250, - "height": 250 - }, - "large": { - "url": "http:\/\/shop13.webmodule.prestashop.net\/img\/p\/2\/2-large_default.jpg", - "width": 800, - "height": 800 - }, - "legend": "T-shirt imprim\u00e9 colibri", - "cover": null, - "id_image": "2", - "position": "2", - "associatedVariants": [ - "7", - "1", - "5", - "3" - ] - }, - "has_discount": true, - "discount_type": "percentage", - "discount_percentage": "-20%", - "discount_percentage_absolute": "20%", - "discount_amount": "0,02\u00a0\u20ac", - "discount_amount_to_display": "-0,02\u00a0\u20ac", - "price_amount": 0.096000000000000002, - "unit_price_full": "", - "show_availability": true, - "availability_date": null, - "availability_message": "", - "availability": "available" -} diff --git a/_dev/js/front/test/mocks/di-container.mock.js b/_dev/js/front/test/mocks/di-container.mock.js deleted file mode 100644 index a1f1e30e8..000000000 --- a/_dev/js/front/test/mocks/di-container.mock.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const DI_CONTAINER = { - container: { - ServiceFoo: 'Foo', - ServiceBar: 'Bar', - ServiceBaz: 'Baz' - } -}; diff --git a/_dev/js/front/test/mocks/html-templates/prestashop-site-1_7.js b/_dev/js/front/test/mocks/html-templates/prestashop-site-1_7.js deleted file mode 100644 index c1a3735c8..000000000 --- a/_dev/js/front/test/mocks/html-templates/prestashop-site-1_7.js +++ /dev/null @@ -1,47 +0,0 @@ -import PRODUCT_DATASET from '../data/product-dataset.json'; - -export function cleanSite() { - document.body.removeAttribute('id'); - document.body.innerHTML = ''; -} - -export function mockCartPage() { - document.body.id = 'cart'; -} - -export function mockCheckoutPage() { - document.body.id = 'checkout'; -} - -export function mockCheckoutPaymentStepPage() { - document.body.id = 'checkout'; - document.body.innerHTML = `

`; -} - -export function mockCheckoutPersonalInformationStepPage() { - document.body.id = 'checkout'; - document.body.innerHTML = `
`; -} - -export function mockProductPage() { - document.body.id = 'product'; - document.body.innerHTML = ` -
- `; - - document - .getElementById('product-details') - .setAttribute('data-product', JSON.stringify(PRODUCT_DATASET)); -} - -export function mockCheckoutVars() { - window.ps_checkoutPayPalOrderId = ''; - window.ps_checkoutPayPalClientToken = ''; - window.ps_checkoutPayPalSdkConfig = { - clientId: 'test', - currency: 'EUR', - intent: 'capture', - integrationDate: '2022-14-06', - components: 'marks,funding-eligibility,buttons' - }; -} diff --git a/_dev/js/front/test/mocks/service/paypal.service.js b/_dev/js/front/test/mocks/service/paypal.service.js deleted file mode 100644 index 055875aa5..000000000 --- a/_dev/js/front/test/mocks/service/paypal.service.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -export const PayPalServiceMock = { - getButtonPayment: jest.fn(), - render: jest.fn() -}; diff --git a/_dev/js/front/test/setup.js b/_dev/js/front/test/setup.js deleted file mode 100644 index 71a0ec05d..000000000 --- a/_dev/js/front/test/setup.js +++ /dev/null @@ -1,4 +0,0 @@ -import 'core-js/stable'; -import 'regenerator-runtime/runtime'; - -import '../src/utils/globals'; diff --git a/_dev/js/front/webpack/profile/build.js b/_dev/js/front/webpack/profile/build.js deleted file mode 100644 index 5948fc653..000000000 --- a/_dev/js/front/webpack/profile/build.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -const TerserPlugin = require('terser-webpack-plugin'); -const { merge } = require('webpack-merge'); - -const common = require('../webpack.config'); -module.exports = merge(common, { - mode: 'production', - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - terserOptions: { - format: { - comments: false - }, - parse: { - // We want terser to parse ecma 8 code. However, we don't want it - // to apply any minification steps that turns valid ecma 5 code - // into invalid ecma 5 code. This is why the 'compress' and 'output' - // sections only apply transformations that are ecma 5 safe - // https://github.com/facebook/create-react-app/pull/4234 - ecma: 8 - }, - compress: { - ecma: 5, - warnings: false, - // Disabled because of an issue with Uglify breaking seemingly valid code: - // https://github.com/facebook/create-react-app/issues/2376 - // Pending further investigation: - // https://github.com/mishoo/UglifyJS2/issues/2011 - comparisons: false, - // Disabled because of an issue with Terser breaking valid code: - // https://github.com/facebook/create-react-app/issues/5250 - // Pending further investigation: - // https://github.com/terser-js/terser/issues/120 - inline: 2 - }, - mangle: { - safari10: true - }, - // Added for profiling in devtools - keep_classnames: false, - keep_fnames: false, - output: { - ecma: 5, - comments: false, - // Turned on because emoji and regex is not minified properly using default - // https://github.com/facebook/create-react-app/issues/2488 - ascii_only: true - } - }, - extractComments: false - }) - ] - } -}); diff --git a/_dev/js/front/webpack/profile/watch.js b/_dev/js/front/webpack/profile/watch.js deleted file mode 100644 index 6234891ad..000000000 --- a/_dev/js/front/webpack/profile/watch.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -const { merge } = require('webpack-merge'); - -const common = require('../webpack.config'); -module.exports = merge(common, { - mode: 'development', - devtool: 'inline-source-map' -}); diff --git a/_dev/js/front/webpack/utils/paths.js b/_dev/js/front/webpack/utils/paths.js deleted file mode 100644 index 18d47309b..000000000 --- a/_dev/js/front/webpack/utils/paths.js +++ /dev/null @@ -1,16 +0,0 @@ -const { join } = require('path'); - -const MODULE_DIR = join(__dirname, '../../../../../'); -const PROJECT_DIR = join(__dirname, '../../'); - -const INPUT_FILE = join(PROJECT_DIR, 'src/index.js'); -const OUTPUT_FOLDER = join(MODULE_DIR, 'views/js'); -const OUTPUT_LICENSES = join(MODULE_DIR, 'views/js/front.licenses.json'); - -module.exports = { - MODULE_DIR, - PROJECT_DIR, - INPUT_FILE, - OUTPUT_FOLDER, - OUTPUT_LICENSES -}; diff --git a/_dev/js/front/webpack/webpack.config.js b/_dev/js/front/webpack/webpack.config.js deleted file mode 100644 index 28af5902c..000000000 --- a/_dev/js/front/webpack/webpack.config.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright since 2007 PrestaShop SA and Contributors - * PrestaShop is an International Registered Trademark & Property of PrestaShop SA - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) - * that is bundled with this package in the file LICENSE.md. - * It is also available through the world-wide-web at this URL: - * https://opensource.org/licenses/AFL-3.0 - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@prestashop.com so we can send you a copy immediately. - * - * @author PrestaShop SA - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - */ -const { INPUT_FILE, OUTPUT_FOLDER } = require('./utils/paths'); - -module.exports = { - entry: { - front: INPUT_FILE - }, - output: { - filename: '[name].js', - path: OUTPUT_FOLDER - }, - - stats: { - children: false, - modules: false - }, - - module: { - rules: [ - { - test: /\.js$/, - exclude: /(node_modules|bower_components)/, - use: 'babel-loader' - } - ] - } -}; diff --git a/_dev/js/front/README.md b/docs/front/README.md similarity index 100% rename from _dev/js/front/README.md rename to docs/front/README.md diff --git a/_dev/js/front/docs/front-end-initialization.jpg b/docs/front/front-end-initialization.jpg similarity index 100% rename from _dev/js/front/docs/front-end-initialization.jpg rename to docs/front/front-end-initialization.jpg diff --git a/_dev/js/front/docs/html-generation.jpg b/docs/front/html-generation.jpg similarity index 100% rename from _dev/js/front/docs/html-generation.jpg rename to docs/front/html-generation.jpg diff --git a/ps_checkout.php b/ps_checkout.php index 0720d6294..b2aeee191 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1099,10 +1099,16 @@ public function hookActionFrontControllerSetMedia() ], ]); + + /** @var \PrestaShop\Module\PrestashopCheckout\Environment\Env $env */ + $env = $this->getService(\PrestaShop\Module\PrestashopCheckout\Environment\Env::class); + + $foSDkUrl = $env->getEnv('CHECKOUT_FO_SDK_URL'); + if (method_exists($this->context->controller, 'registerJavascript')) { $this->context->controller->registerJavascript( $this->name . 'Front', - $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), + $foSDkUrl, [ 'position' => 'bottom', 'priority' => 201, @@ -1110,10 +1116,7 @@ public function hookActionFrontControllerSetMedia() ] ); } else { - $this->context->controller->addJS( - $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), - false - ); + $this->context->controller->addJS($foSDkUrl, false); } } From efb4e76140954398497e3278c68c488f335c4b7b Mon Sep 17 00:00:00 2001 From: Laurynas Date: Tue, 28 May 2024 16:14:20 +0300 Subject: [PATCH 02/37] Added google pay to payment option list --- .../FundingSourceCollectionBuilder.php | 5 +++ .../FundingSourceTranslationProvider.php | 1 + views/img/google_pay.svg | 37 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 views/img/google_pay.svg diff --git a/src/FundingSource/FundingSourceCollectionBuilder.php b/src/FundingSource/FundingSourceCollectionBuilder.php index 762d7afda..1a12bb331 100644 --- a/src/FundingSource/FundingSourceCollectionBuilder.php +++ b/src/FundingSource/FundingSourceCollectionBuilder.php @@ -107,6 +107,11 @@ public function create() $blik->setIsEnabled($this->configuration->isEnabled('blik')); $blik->setCountries($this->eligibilityConstraint->getCountries('blik')); + // Google pay + $blik = new FundingSourceEntity('google_pay'); + $blik->setPosition($this->configuration->getPosition('google_pay', 11)); + $blik->setIsEnabled($this->configuration->isEnabled('google_pay')); + return [$paypal, $paylater, $card, $bancontact, $eps, $giropay, $ideal, $mybank, $p24, $blik]; } } diff --git a/src/FundingSource/FundingSourceTranslationProvider.php b/src/FundingSource/FundingSourceTranslationProvider.php index e1deeafb9..9b85066f9 100644 --- a/src/FundingSource/FundingSourceTranslationProvider.php +++ b/src/FundingSource/FundingSourceTranslationProvider.php @@ -64,6 +64,7 @@ public function __construct(Module $module) 'maxima' => 'Maxima', 'mercadopago' => 'Mercado Pago', 'sepa' => 'SEPA', + 'google_pay' => 'Google Pay', 'token' => $module->l('Pay with %s', 'fundingsourcetranslationprovider'), ]; diff --git a/views/img/google_pay.svg b/views/img/google_pay.svg new file mode 100644 index 000000000..713044919 --- /dev/null +++ b/views/img/google_pay.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + From b918fb28667f54e3f8e59116166cfb814d01d3b3 Mon Sep 17 00:00:00 2001 From: Laurynas Date: Wed, 29 May 2024 14:05:32 +0300 Subject: [PATCH 03/37] Fixed funding source collection builder --- src/FundingSource/FundingSourceCollectionBuilder.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/FundingSource/FundingSourceCollectionBuilder.php b/src/FundingSource/FundingSourceCollectionBuilder.php index 1a12bb331..a27b623e1 100644 --- a/src/FundingSource/FundingSourceCollectionBuilder.php +++ b/src/FundingSource/FundingSourceCollectionBuilder.php @@ -108,10 +108,10 @@ public function create() $blik->setCountries($this->eligibilityConstraint->getCountries('blik')); // Google pay - $blik = new FundingSourceEntity('google_pay'); - $blik->setPosition($this->configuration->getPosition('google_pay', 11)); - $blik->setIsEnabled($this->configuration->isEnabled('google_pay')); + $googlePay = new FundingSourceEntity('google_pay'); + $googlePay->setPosition($this->configuration->getPosition('google_pay', 11)); + $googlePay->setIsEnabled($this->configuration->isEnabled('google_pay')); - return [$paypal, $paylater, $card, $bancontact, $eps, $giropay, $ideal, $mybank, $p24, $blik]; + return [$paypal, $paylater, $card, $bancontact, $eps, $giropay, $ideal, $mybank, $p24, $blik, $googlePay]; } } From 98cf34a4be6a7216ec05e1374fdbf9d8b0c61485 Mon Sep 17 00:00:00 2001 From: Laurynas Date: Wed, 29 May 2024 14:10:56 +0300 Subject: [PATCH 04/37] Added country list for GPay --- src/FundingSource/FundingSourceCollectionBuilder.php | 1 + src/FundingSource/FundingSourceEligibilityConstraint.php | 1 + 2 files changed, 2 insertions(+) diff --git a/src/FundingSource/FundingSourceCollectionBuilder.php b/src/FundingSource/FundingSourceCollectionBuilder.php index a27b623e1..96dcbe195 100644 --- a/src/FundingSource/FundingSourceCollectionBuilder.php +++ b/src/FundingSource/FundingSourceCollectionBuilder.php @@ -111,6 +111,7 @@ public function create() $googlePay = new FundingSourceEntity('google_pay'); $googlePay->setPosition($this->configuration->getPosition('google_pay', 11)); $googlePay->setIsEnabled($this->configuration->isEnabled('google_pay')); + $googlePay->setCountries($this->eligibilityConstraint->getCountries('google_pay')); return [$paypal, $paylater, $card, $bancontact, $eps, $giropay, $ideal, $mybank, $p24, $blik, $googlePay]; } diff --git a/src/FundingSource/FundingSourceEligibilityConstraint.php b/src/FundingSource/FundingSourceEligibilityConstraint.php index f6284123e..18a94aff2 100644 --- a/src/FundingSource/FundingSourceEligibilityConstraint.php +++ b/src/FundingSource/FundingSourceEligibilityConstraint.php @@ -41,6 +41,7 @@ public function getCountries($fundingSourceName) 'mybank' => ['IT'], 'p24' => ['PL'], 'paylater' => ['FR', 'GB', 'US', 'ES', 'IT'], + 'google_pay' => ['AU', 'AT', 'BE', 'BG', 'CA', 'CN', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LI', 'LT', 'LU', 'MK', 'MT', 'NL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'GB', 'US'], ]; return $countries[$fundingSourceName]; From 62fa60db87ec328a1dfd632e6c4266d7726c740a Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 25 Jun 2024 15:28:03 +0300 Subject: [PATCH 05/37] Replaced gpay logo with borderless one --- views/img/google_pay.svg | 48 +++++++++------------------------------- 1 file changed, 11 insertions(+), 37 deletions(-) diff --git a/views/img/google_pay.svg b/views/img/google_pay.svg index 713044919..3ddf1e493 100644 --- a/views/img/google_pay.svg +++ b/views/img/google_pay.svg @@ -1,37 +1,11 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + From f5e80587c75767ac641d5bb07cbc0dd7ef3f6686 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 27 Jun 2024 13:17:01 +0300 Subject: [PATCH 06/37] Added google pay component to PayPal sdk config --- config/common.yml | 1 + .../FundingSourceEligibilityConstraint.php | 16 +++++++ .../Sdk/PayPalSdkConfigurationBuilder.php | 42 +++++++++++++++---- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/config/common.yml b/config/common.yml index 1d1b8e545..b7a5304e0 100644 --- a/config/common.yml +++ b/config/common.yml @@ -237,6 +237,7 @@ services: - '@PrestaShop\Module\PrestashopCheckout\ShopContext' - '@PrestaShop\Module\PrestashopCheckout\Context\PrestaShopContext' - '@ps_checkout.logger' + - '@PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceEligibilityConstraint' PrestaShop\Module\PrestashopCheckout\Presenter\Store\Modules\PaypalModule: class: 'PrestaShop\Module\PrestashopCheckout\Presenter\Store\Modules\PaypalModule' diff --git a/src/FundingSource/FundingSourceEligibilityConstraint.php b/src/FundingSource/FundingSourceEligibilityConstraint.php index 18a94aff2..e107f518f 100644 --- a/src/FundingSource/FundingSourceEligibilityConstraint.php +++ b/src/FundingSource/FundingSourceEligibilityConstraint.php @@ -46,4 +46,20 @@ public function getCountries($fundingSourceName) return $countries[$fundingSourceName]; } + + /** + * Get eligible currencies for PayPal funding sources + * + * @param string $fundingSourceName + * + * @return array + */ + public function getCurrencies($fundingSourceName) + { + $currencies = [ + 'google_pay' => ['AUD', 'BRL', 'CAD', 'CHF', 'CZK', 'DKK', 'EUR', 'GBP', 'HKD', 'HUF', 'ILS', 'JPY', 'MXN', 'NOK', 'NZD', 'PHP', 'PLN', 'SEK', 'SGD', 'THB', 'TWD', 'USD'], + ]; + + return $currencies[$fundingSourceName]; + } } diff --git a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php index 87fcbdc25..8e2394147 100644 --- a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php +++ b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php @@ -27,11 +27,13 @@ use PrestaShop\Module\PrestashopCheckout\Environment\Env; use PrestaShop\Module\PrestashopCheckout\ExpressCheckout\ExpressCheckoutConfiguration; use PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceConfigurationRepository; +use PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceEligibilityConstraint; use PrestaShop\Module\PrestashopCheckout\PayPal\OAuth\Query\GetPayPalGetUserIdTokenQuery; use PrestaShop\Module\PrestashopCheckout\PayPal\OAuth\Query\GetPayPalGetUserIdTokenQueryResult; use PrestaShop\Module\PrestashopCheckout\PayPal\PayPalConfiguration; use PrestaShop\Module\PrestashopCheckout\PayPal\PayPalPayLaterConfiguration; use PrestaShop\Module\PrestashopCheckout\ShopContext; +use PrestaShop\PrestaShop\Adapter\Shop\Context; use Psr\Log\LoggerInterface; /** @@ -78,9 +80,14 @@ class PayPalSdkConfigurationBuilder * @var Env */ private $env; + /** + * @var FundingSourceEligibilityConstraint + */ + private $fundingSourceEligibilityConstraint; /** * @param \Ps_checkout $module + * @param Env $env * @param PayPalConfiguration $configuration * @param PayPalPayLaterConfiguration $payLaterConfiguration * @param FundingSourceConfigurationRepository $fundingSourceConfigurationRepository @@ -88,17 +95,19 @@ class PayPalSdkConfigurationBuilder * @param ShopContext $shopContext * @param PrestaShopContext $prestaShopContext * @param LoggerInterface $logger + * @param FundingSourceEligibilityConstraint $fundingSourceEligibilityConstraint */ public function __construct( - \Ps_checkout $module, - Env $env, - PayPalConfiguration $configuration, - PayPalPayLaterConfiguration $payLaterConfiguration, + \Ps_checkout $module, + Env $env, + PayPalConfiguration $configuration, + PayPalPayLaterConfiguration $payLaterConfiguration, FundingSourceConfigurationRepository $fundingSourceConfigurationRepository, - ExpressCheckoutConfiguration $expressCheckoutConfiguration, - ShopContext $shopContext, - PrestaShopContext $prestaShopContext, - LoggerInterface $logger + ExpressCheckoutConfiguration $expressCheckoutConfiguration, + ShopContext $shopContext, + PrestaShopContext $prestaShopContext, + LoggerInterface $logger, + FundingSourceEligibilityConstraint $fundingSourceEligibilityConstraint ) { $this->configuration = $configuration; $this->payLaterConfiguration = $payLaterConfiguration; @@ -109,6 +118,7 @@ public function __construct( $this->prestaShopContext = $prestaShopContext; $this->logger = $logger; $this->env = $env; + $this->fundingSourceEligibilityConstraint = $fundingSourceEligibilityConstraint; } /** @@ -133,6 +143,10 @@ public function buildConfiguration() $components[] = 'messages'; } + if ($this->shouldIncludeGooglePayComponent()) { + $components[] = 'googlepay'; + } + $params = [ 'clientId' => $this->env->getPaypalClientId(), 'merchantId' => $this->configuration->getMerchantId(), @@ -472,4 +486,16 @@ private function getEligibleAlternativePaymentMethods() return $fundingSourcesEnabled; } + + private function shouldIncludeGooglePayComponent() + { + $context = \Context::getContext(); + $country = $this->getCountry(); + $fundingSource = $this->fundingSourceConfigurationRepository->get('google_pay'); + + return $fundingSource && $fundingSource['active'] + && \Configuration::get('PS_CHECKOUT_GOOGLE_PAY', false) === '1' + && in_array($country, $this->fundingSourceEligibilityConstraint->getCountries('google_pay'), true) + && in_array($context->currency->iso_code, $this->fundingSourceEligibilityConstraint->getCurrencies('google_pay'), true); + } } From 8c9fdad99ffa832f3f77e30a904fe88960b24260 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 28 Jun 2024 14:52:37 +0300 Subject: [PATCH 07/37] Added custom mark for Google Pay --- ps_checkout.php | 13 +++++++++---- src/FundingSource/FundingSourcePresenter.php | 12 +++++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ps_checkout.php b/ps_checkout.php index 0720d6294..06b754318 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -960,18 +960,22 @@ public function hookActionFrontControllerSetMedia() $fundingSourcesSorted = []; $payWithTranslations = []; $isCardAvailable = false; - $vaultedPaymentMarks = []; + $customMarks = []; foreach ($fundingSourceProvider->getSavedTokens($this->context->customer->id) as $fundingSource) { $fundingSourcesSorted[] = $fundingSource->name; $payWithTranslations[$fundingSource->name] = $fundingSource->label; - $vaultedPaymentMarks[$fundingSource->name] = $fundingSource->customMark; + $customMarks[$fundingSource->name] = $fundingSource->customMark; } foreach ($fundingSourceProvider->getAll() as $fundingSource) { $fundingSourcesSorted[] = $fundingSource->name; $payWithTranslations[$fundingSource->name] = $fundingSource->label; + if ($fundingSource->customMark !== null) { + $customMarks[$fundingSource->name] = $fundingSource->customMark; + } + if ('card' === $fundingSource->name) { $isCardAvailable = $fundingSource->isEnabled; } @@ -1005,7 +1009,7 @@ public function hookActionFrontControllerSetMedia() $this->name . 'LoaderImage' => $this->getPathUri() . 'views/img/loader.svg', $this->name . 'PayPalButtonConfiguration' => $payPalConfiguration->getButtonConfiguration(), $this->name . 'CardFundingSourceImg' => Media::getMediaPath(_PS_MODULE_DIR_ . $this->name . '/views/img/payment-cards.png'), - $this->name . 'VaultedPaymentMarks' => $vaultedPaymentMarks, + $this->name . 'CustomMarks' => $customMarks, $this->name . 'CardLogos' => [ 'AMEX' => Media::getMediaPath(_PS_MODULE_DIR_ . $this->name . '/views/img/amex.svg'), 'CB_NATIONALE' => Media::getMediaPath(_PS_MODULE_DIR_ . $this->name . '/views/img/cb.svg'), @@ -1102,7 +1106,8 @@ public function hookActionFrontControllerSetMedia() if (method_exists($this->context->controller, 'registerJavascript')) { $this->context->controller->registerJavascript( $this->name . 'Front', - $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), + 'https://fo-sdk.laurynas-sedys-ext-mytun.prestashop.name/ps_checkout-fo-sdk.js', +// $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), [ 'position' => 'bottom', 'priority' => 201, diff --git a/src/FundingSource/FundingSourcePresenter.php b/src/FundingSource/FundingSourcePresenter.php index addad1d1d..d6902b3ca 100644 --- a/src/FundingSource/FundingSourcePresenter.php +++ b/src/FundingSource/FundingSourcePresenter.php @@ -44,8 +44,11 @@ class FundingSourcePresenter * @param FundingSourceTranslationProvider $translation * @param CountryRepository $country */ - public function __construct(FundingSourceTranslationProvider $translation, CountryRepository $country, PaymentMethodLogoProvider $paymentMethodLogoProvider) - { + public function __construct( + FundingSourceTranslationProvider $translation, + CountryRepository $country, + PaymentMethodLogoProvider $paymentMethodLogoProvider + ) { $this->translation = $translation; $this->country = $country; $this->paymentMethodLogoProvider = $paymentMethodLogoProvider; @@ -67,7 +70,10 @@ public function present($entity, $isAdmin) $entity->getPosition(), $isAdmin ? $this->country->getCountryNames($entity->getCountries()) : $entity->getCountries(), $entity->getIsEnabled(), - $entity->getIsToggleable() + $entity->getIsToggleable(), + null, + null, + $name === 'google_pay' ? $this->paymentMethodLogoProvider->getLogoByPaymentSource([$name => []]) : null ); } From ba89939110f9c6f148e675dd4c8b38634ec3466b Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 5 Jul 2024 15:32:03 +0300 Subject: [PATCH 08/37] Added new controller for google pay and transaction info builder --- config/common.yml | 7 + config/query-handlers.yml | 6 + controllers/front/googlepay.php | 94 +++++++++ ps_checkout.php | 1 + .../Builder/GoogleTransactionInfoBuilder.php | 117 +++++++++++ .../GooglePay/DTO/GooglePayDisplayItem.php | 111 ++++++++++ .../DTO/GooglePayTransactionInfo.php | 191 ++++++++++++++++++ .../GetGooglePayTransactionInfoQuery.php | 26 +++ ...etGooglePayTransactionInfoQueryHandler.php | 30 +++ ...GetGooglePayTransactionInfoQueryResult.php | 25 +++ src/Translations/Translations.php | 8 + 11 files changed, 616 insertions(+) create mode 100644 controllers/front/googlepay.php create mode 100644 src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php create mode 100644 src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php create mode 100644 src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php create mode 100644 src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php create mode 100644 src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php create mode 100644 src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php diff --git a/config/common.yml b/config/common.yml index b7a5304e0..54bc75f48 100644 --- a/config/common.yml +++ b/config/common.yml @@ -87,6 +87,7 @@ services: PrestaShop\Module\PrestashopCheckout\PayPal\Customer\Command\SavePayPalCustomerCommand: 'PrestaShop\Module\PrestashopCheckout\PayPal\Customer\CommandHandler\SavePayPalCustomerCommandHandler' PrestaShop\Module\PrestashopCheckout\PayPal\OAuth\Query\GetPayPalGetUserIdTokenQuery: 'PrestaShop\Module\PrestashopCheckout\PayPal\OAuth\Query\GetPayPalGetUserIdTokenQueryHandler' PrestaShop\Module\PrestashopCheckout\PayPal\Order\Command\SavePayPalOrderCommand: 'PrestaShop\Module\PrestashopCheckout\PayPal\Order\CommandHandler\SavePayPalOrderCommandHandler' + PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQuery: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQueryHandler' PrestaShop\Module\PrestashopCheckout\Event\SymfonyEventDispatcherFactory: class: 'PrestaShop\Module\PrestashopCheckout\Event\SymfonyEventDispatcherFactory' @@ -474,3 +475,9 @@ services: public: true arguments: - '@ps_checkout.module' + + PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder: + class: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder' + public: true + arguments: + - '@PrestaShop\Module\PrestashopCheckout\Translations\Translations' diff --git a/config/query-handlers.yml b/config/query-handlers.yml index 865d1df55..390c6f44a 100644 --- a/config/query-handlers.yml +++ b/config/query-handlers.yml @@ -80,3 +80,9 @@ services: - '@PrestaShop\Module\PrestashopCheckout\PayPal\OAuth\OAuthService' - '@PrestaShop\Module\PrestashopCheckout\Repository\PayPalCustomerRepository' - '@PrestaShop\Module\PrestashopCheckout\PayPal\PayPalConfiguration' + + PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQueryHandler: + class: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQueryHandler' + public: true + arguments: + - '@PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder' diff --git a/controllers/front/googlepay.php b/controllers/front/googlepay.php new file mode 100644 index 000000000..f17d53de1 --- /dev/null +++ b/controllers/front/googlepay.php @@ -0,0 +1,94 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +use PrestaShop\Module\PrestashopCheckout\Cart\ValueObject\CartId; +use PrestaShop\Module\PrestashopCheckout\CommandBus\CommandBusInterface; +use PrestaShop\Module\PrestashopCheckout\Controller\AbstractFrontController; +use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQuery; + +/** + * This controller receive ajax call on customer click on a payment button + */ +class Ps_CheckoutGooglepayModuleFrontController extends AbstractFrontController { + + /** + * @var Ps_checkout + */ + public $module; + + /** + * @var CommandBusInterface + */ + private $commandBus; + + /** + * @see FrontController::postProcess() + */ + public function postProcess() { + try { + $bodyValues = []; + $bodyContent = file_get_contents('php://input'); + + if (!empty($bodyContent)) { + $bodyValues = json_decode($bodyContent, true); + } + + $action = $bodyValues['action']; + + $this->commandBus = $this->module->getService('ps_checkout.bus.command'); + + switch ($action) { + case 'create': + $this->create($bodyValues); + break; + case 'capture': + $this->capture($bodyValues); + break; + case 'getTransactionInfo': + $this->getTransactionInfo($bodyValues); + break; + default: + $this->exitWithExceptionMessage(new Exception('Invalid request', 400)); + } + } catch (Exception $exception) { + $this->exitWithExceptionMessage($exception); + } + } + + private function create($bodyValues) + { + + } + + private function capture($bodyValues) + { + + } + + private function getTransactionInfo($bodyValues) + { + $transactionInfo = $this->commandBus->handle(new GetGooglePayTransactionInfoQuery(new CartId($this->context->cart->id))); + + $this->exitWithResponse([ + 'httpCode' => 200, + 'body' => $transactionInfo->getPayload()->toArray(), + ]); + } +} diff --git a/ps_checkout.php b/ps_checkout.php index 06b754318..863512d6d 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1031,6 +1031,7 @@ public function hookActionFrontControllerSetMedia() $this->name . 'ExpressCheckoutUrl' => $this->context->link->getModuleLink($this->name, 'ExpressCheckout', [], true), $this->name . 'VaultUrl' => $this->context->link->getModuleLink($this->name, 'vault', [], true), $this->name . 'PaymentUrl' => $this->context->link->getModuleLink($this->name, 'payment', [], true), + $this->name . 'GooglePayUrl' => $this->context->link->getModuleLink($this->name, 'googlepay', [], true), $this->name . 'CheckoutUrl' => $this->getCheckoutPageUrl(), $this->name . 'ConfirmUrl' => $this->context->link->getPageLink('order-confirmation', true, (int) $this->context->language->id), $this->name . 'PayPalSdkConfig' => $payPalSdkConfigurationBuilder->buildConfiguration(), diff --git a/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php new file mode 100644 index 000000000..434038bfb --- /dev/null +++ b/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php @@ -0,0 +1,117 @@ +language->iso_code; + $this->translations = $translations->getTranslations()[$isoCode]['google_pay']; + } + + /** + * @return GooglePayTransactionInfo + * + * @throws PsCheckoutException + */ + public function buildFromPayPalPayload($payload) + { + $transactionInfo = new GooglePayTransactionInfo(); + + $breakdown = $payload['amount']['breakdown']; + + $displayItems = []; + + if ($breakdown['shipping']['value'] > 0) { + $shipping = new GooglePayDisplayItem(); + $shipping->setPrice($breakdown['shipping']['value']) + ->setType(GooglePayDisplayItem::TYPE_LINE_ITEM) + ->setLabel($this->translations['shipping']); + $displayItems[] = $shipping; + } + + if ($breakdown['handling']['value'] > 0) { + $handling = new GooglePayDisplayItem(); + $handling->setPrice($breakdown['handling']['value']) + ->setType(GooglePayDisplayItem::TYPE_LINE_ITEM) + ->setLabel($this->translations['handling']); + $displayItems[] = $handling; + } + + if ($breakdown['discount']['value'] > 0) { + $discount = new GooglePayDisplayItem(); + $discount->setPrice('-' . $breakdown['discount']['value']) + ->setType(GooglePayDisplayItem::TYPE_LINE_ITEM) + ->setLabel($this->translations['discount']); + $displayItems[] = $discount; + } + + $subtotal = new GooglePayDisplayItem(); + $subtotal->setPrice($this->formatAmount($payload['amount']['value'] - $breakdown['tax_total']['value'], $payload['amount']['currency_code'])) + ->setType(GooglePayDisplayItem::TYPE_SUBTOTAL) + ->setLabel($this->translations['subtotal']); + $displayItems[] = $subtotal; + + $tax = new GooglePayDisplayItem(); + $tax->setPrice($breakdown['tax_total']['value']) + ->setType(GooglePayDisplayItem::TYPE_TAX) + ->setLabel($this->translations['tax']); + + $displayItems[] = $tax; + + $productItems = array_map(function ($item) { + $productItem = new GooglePayDisplayItem(); + $productItem->setPrice($item['unit_amount']['value']) + ->setType(GooglePayDisplayItem::TYPE_LINE_ITEM) + ->setLabel($item['name'] . ' ' . $item['description'] . ' x' . $item['quantity']); + + return $productItem; + }, $payload['items']); + + $displayItems = array_merge($productItems, $displayItems); + + $transactionInfo->setCurrencyCode($payload['amount']['currency_code']) + ->setTotalPrice($payload['amount']['value']) + ->setTotalPriceLabel($this->translations['total']) + ->setDisplayItems($displayItems); + + return $transactionInfo; + } + + /** + * Get decimal to round correspondent to the payment currency used + * Advise from PayPal: Always round to 2 decimals except for HUF, JPY and TWD + * currencies which require a round with 0 decimal + * + * @return int + */ + private function getNbDecimalToRound($currencyIsoCode) + { + if (in_array($currencyIsoCode, ['HUF', 'JPY', 'TWD'], true)) { + return 0; + } + + return 2; + } + + /** + * @param float|int|string $amount + * + * @return string + */ + private function formatAmount($amount, $currencyIsoCode) + { + return sprintf("%01.{$this->getNbDecimalToRound($currencyIsoCode)}F", $amount); + } +} diff --git a/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php new file mode 100644 index 000000000..b7d3ff680 --- /dev/null +++ b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php @@ -0,0 +1,111 @@ +label = $label; + return $this; + } + + /** + * @return string + */ + public function getLabel() + { + return $this->label; + } + + /** + * @param string $type + * @return GooglePayDisplayItem + */ + public function setType($type) + { + $this->type = $type; + return $this; + } + + /** + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * @param string $price + * @return GooglePayDisplayItem + */ + public function setPrice($price) + { + $this->price = $price; + return $this; + } + + /** + * @return string + */ + public function getPrice() + { + return $this->price; + } + + /** + * @param string $status + * @return GooglePayDisplayItem + */ + public function setStatus($status) + { + $this->status = $status; + return $this; + } + + /** + * @return string + */ + public function getStatus() + { + return $this->status; + } + + public function toArray() + { + return array_filter([ + 'label' => $this->label, + 'type' => $this->type, + 'price' => $this->price, + 'status' => $this->status, + ]); + } +} diff --git a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php new file mode 100644 index 000000000..0a454e15e --- /dev/null +++ b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php @@ -0,0 +1,191 @@ +currencyCode; + } + + /** + * @param string $currencyCode + * @return GooglePayTransactionInfo + */ + public function setCurrencyCode($currencyCode) + { + $this->currencyCode = $currencyCode; + return $this; + } + + /** + * @return string + */ + public function getCountryCode() + { + return $this->countryCode; + } + /** + * @param string $countryCode + * @return GooglePayTransactionInfo + */ + public function setCountryCode($countryCode) + { + $this->countryCode = $countryCode; + return $this; + } + /** + * @return string + */ + public function getTransactionId() + { + return $this->transactionId; + } + /** + * @param string $transactionId + * @return GooglePayTransactionInfo + */ + public function setTransactionId($transactionId) + { + $this->transactionId = $transactionId; + return $this; + } + /** + * @return string + */ + public function getTotalPriceStatus() + { + return $this->totalPriceStatus; + } + /** + * @param string $totalPriceStatus + * @return GooglePayTransactionInfo + */ + public function setTotalPriceStatus($totalPriceStatus) + { + $this->totalPriceStatus = $totalPriceStatus; + return $this; + } + /** + * @return string + */ + public function getTotalPrice() + { + return $this->totalPrice; + } + /** + * @param string $totalPrice + * @return GooglePayTransactionInfo + */ + public function setTotalPrice($totalPrice) + { + $this->totalPrice = $totalPrice; + return $this; + } + /** + * @return GooglePayDisplayItem[] + */ + public function getDisplayItems() + { + return $this->displayItems; + } + /** + * @param GooglePayDisplayItem[] $displayItems + * @return GooglePayTransactionInfo + */ + public function setDisplayItems($displayItems) + { + $this->displayItems = $displayItems; + return $this; + } + /** + * @return string + */ + public function getTotalPriceLabel() + { + return $this->totalPriceLabel; + } + /** + * @param string $totalPriceLabel + * @return GooglePayTransactionInfo + */ + public function setTotalPriceLabel($totalPriceLabel) + { + $this->totalPriceLabel = $totalPriceLabel; + return $this; + } + /** + * @return string + */ + public function getCheckoutOption() + { + return $this->checkoutOption; + } + /** + * @param string $checkoutOption + * @return GooglePayTransactionInfo + */ + public function setCheckoutOption($checkoutOption) + { + $this->checkoutOption = $checkoutOption; + return $this; + } + + public function toArray() + { + return array_filter([ + 'currencyCode' => $this->currencyCode, + 'countryCode' => $this->countryCode, + 'transactionId' => $this->transactionId, + 'totalPriceStatus' => $this->totalPriceStatus, + 'totalPrice' => $this->totalPrice, + 'totalPriceLabel' => $this->totalPriceLabel, + 'checkoutOption' => $this->checkoutOption, + 'displayItems' => array_map(function (GooglePayDisplayItem $item) { + return $item->toArray(); + }, $this->displayItems), + ]); + } +} diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php new file mode 100644 index 000000000..86bfa2c88 --- /dev/null +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php @@ -0,0 +1,26 @@ +cartId = $cartId; + } + + /** + * @return CartId + */ + public function getCartId() + { + return $this->cartId; + } +} diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php new file mode 100644 index 000000000..c47921fa5 --- /dev/null +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php @@ -0,0 +1,30 @@ +builder = $builder; + } + + public function handle(GetGooglePayTransactionInfoQuery $query) + { + $cartPresenter = (new CartPresenter())->present(); + $orderPayloadBuilder = new OrderPayloadBuilder($cartPresenter); + + $orderPayloadBuilder->buildFullPayload(); + $payload = $orderPayloadBuilder->presentPayload(); + + return new GetGooglePayTransactionInfoQueryResult($this->builder->buildFromPayPalPayload($payload->getArray())); + } +} diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php new file mode 100644 index 000000000..1bf9649dc --- /dev/null +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php @@ -0,0 +1,25 @@ +payload = $payload; + } + + /** + * @return GooglePayTransactionInfo + */ + public function getPayload() + { + return $this->payload; + } +} diff --git a/src/Translations/Translations.php b/src/Translations/Translations.php index 9bb8e36ac..c2332bbe7 100644 --- a/src/Translations/Translations.php +++ b/src/Translations/Translations.php @@ -537,6 +537,14 @@ public function getTranslations() 'paymentTokenNotSaved' => $this->module->l('was not saved for future purchases', 'translations'), ], ], + 'google_pay' => [ + 'shipping' => $this->module->l('Shipping', 'translations'), + 'tax' => $this->module->l('Tax', 'translations'), + 'total' => $this->module->l('Total', 'translations'), + 'subtotal' => $this->module->l('Subtotal', 'translations'), + 'handling' => $this->module->l('Handling', 'translations'), + 'discount' => $this->module->l('Discount', 'translations'), + ] ]; return $translations; From 0192b8abb7181cc54d715565d282baf1edb71948 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 5 Jul 2024 17:02:04 +0300 Subject: [PATCH 09/37] Added license headers --- .../Builder/GoogleTransactionInfoBuilder.php | 18 ++++++++++++++++++ .../GooglePay/DTO/GooglePayDisplayItem.php | 18 ++++++++++++++++++ .../DTO/GooglePayTransactionInfo.php | 18 ++++++++++++++++++ .../GetGooglePayTransactionInfoQuery.php | 18 ++++++++++++++++++ ...etGooglePayTransactionInfoQueryHandler.php | 19 +++++++++++++++++++ ...GetGooglePayTransactionInfoQueryResult.php | 19 +++++++++++++++++++ 6 files changed, 110 insertions(+) diff --git a/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php index 434038bfb..8b512bb31 100644 --- a/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php +++ b/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php @@ -1,4 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder; diff --git a/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php index b7d3ff680..bc471588b 100644 --- a/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php +++ b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php @@ -1,4 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO; diff --git a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php index 0a454e15e..e463f5a73 100644 --- a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php +++ b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php @@ -1,4 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO; diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php index 86bfa2c88..e231252f9 100644 --- a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQuery.php @@ -1,4 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query; diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php index c47921fa5..7bd3badd8 100644 --- a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php @@ -1,4 +1,23 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query; use PrestaShop\Module\PrestashopCheckout\Builder\Payload\OrderPayloadBuilder; diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php index 1bf9649dc..fa799c18a 100644 --- a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryResult.php @@ -1,4 +1,23 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query; use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO\GooglePayTransactionInfo; From c23fbe46e2c392e18a03680f5d1f74bd78dcc96d Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 5 Jul 2024 17:19:04 +0300 Subject: [PATCH 10/37] CS fix --- controllers/front/googlepay.php | 9 +++-- src/PayPal/GooglePay/Builder/index.php | 28 ++++++++++++++++ .../GooglePay/DTO/GooglePayDisplayItem.php | 14 ++++++-- .../DTO/GooglePayTransactionInfo.php | 33 +++++++++++++++++-- src/PayPal/GooglePay/DTO/index.php | 28 ++++++++++++++++ src/PayPal/GooglePay/Query/index.php | 28 ++++++++++++++++ .../Sdk/PayPalSdkConfigurationBuilder.php | 22 ++++++------- src/Translations/Translations.php | 2 +- 8 files changed, 142 insertions(+), 22 deletions(-) create mode 100644 src/PayPal/GooglePay/Builder/index.php create mode 100644 src/PayPal/GooglePay/DTO/index.php create mode 100644 src/PayPal/GooglePay/Query/index.php diff --git a/controllers/front/googlepay.php b/controllers/front/googlepay.php index f17d53de1..ced8ae7ba 100644 --- a/controllers/front/googlepay.php +++ b/controllers/front/googlepay.php @@ -26,8 +26,8 @@ /** * This controller receive ajax call on customer click on a payment button */ -class Ps_CheckoutGooglepayModuleFrontController extends AbstractFrontController { - +class Ps_CheckoutGooglepayModuleFrontController extends AbstractFrontController +{ /** * @var Ps_checkout */ @@ -41,7 +41,8 @@ class Ps_CheckoutGooglepayModuleFrontController extends AbstractFrontController /** * @see FrontController::postProcess() */ - public function postProcess() { + public function postProcess() + { try { $bodyValues = []; $bodyContent = file_get_contents('php://input'); @@ -74,12 +75,10 @@ public function postProcess() { private function create($bodyValues) { - } private function capture($bodyValues) { - } private function getTransactionInfo($bodyValues) diff --git a/src/PayPal/GooglePay/Builder/index.php b/src/PayPal/GooglePay/Builder/index.php new file mode 100644 index 000000000..296d682e8 --- /dev/null +++ b/src/PayPal/GooglePay/Builder/index.php @@ -0,0 +1,28 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0', false); +header('Pragma: no-cache'); + +header('Location: ../'); +exit; diff --git a/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php index bc471588b..b542d41c5 100644 --- a/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php +++ b/src/PayPal/GooglePay/DTO/GooglePayDisplayItem.php @@ -33,7 +33,7 @@ class GooglePayDisplayItem */ private $label; /** - * @var 'LINE_ITEM'|'SUBTOTAL' + * @var 'LINE_ITEM'|'SUBTOTAL'|'TAX' */ private $type; /** @@ -47,11 +47,13 @@ class GooglePayDisplayItem /** * @param string $label + * * @return GooglePayDisplayItem */ public function setLabel($label) { $this->label = $label; + return $this; } @@ -64,12 +66,14 @@ public function getLabel() } /** - * @param string $type + * @param 'LINE_ITEM'|'SUBTOTAL'|'TAX' $type + * * @return GooglePayDisplayItem */ public function setType($type) { $this->type = $type; + return $this; } @@ -83,11 +87,13 @@ public function getType() /** * @param string $price + * * @return GooglePayDisplayItem */ public function setPrice($price) { $this->price = $price; + return $this; } @@ -100,12 +106,14 @@ public function getPrice() } /** - * @param string $status + * @param 'FINAL'|'PENDING' $status + * * @return GooglePayDisplayItem */ public function setStatus($status) { $this->status = $status; + return $this; } diff --git a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php index e463f5a73..7869df2ca 100644 --- a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php +++ b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php @@ -70,11 +70,13 @@ public function getCurrencyCode() /** * @param string $currencyCode + * * @return GooglePayTransactionInfo */ public function setCurrencyCode($currencyCode) { $this->currencyCode = $currencyCode; + return $this; } @@ -85,15 +87,19 @@ public function getCountryCode() { return $this->countryCode; } + /** * @param string $countryCode + * * @return GooglePayTransactionInfo */ public function setCountryCode($countryCode) { $this->countryCode = $countryCode; + return $this; } + /** * @return string */ @@ -101,15 +107,19 @@ public function getTransactionId() { return $this->transactionId; } + /** * @param string $transactionId + * * @return GooglePayTransactionInfo */ public function setTransactionId($transactionId) { $this->transactionId = $transactionId; + return $this; } + /** * @return string */ @@ -117,15 +127,19 @@ public function getTotalPriceStatus() { return $this->totalPriceStatus; } + /** - * @param string $totalPriceStatus + * @param 'ESTIMATED'|'FINAL' $totalPriceStatus + * * @return GooglePayTransactionInfo */ public function setTotalPriceStatus($totalPriceStatus) { $this->totalPriceStatus = $totalPriceStatus; + return $this; } + /** * @return string */ @@ -133,15 +147,19 @@ public function getTotalPrice() { return $this->totalPrice; } + /** * @param string $totalPrice + * * @return GooglePayTransactionInfo */ public function setTotalPrice($totalPrice) { $this->totalPrice = $totalPrice; + return $this; } + /** * @return GooglePayDisplayItem[] */ @@ -149,15 +167,19 @@ public function getDisplayItems() { return $this->displayItems; } + /** * @param GooglePayDisplayItem[] $displayItems + * * @return GooglePayTransactionInfo */ public function setDisplayItems($displayItems) { $this->displayItems = $displayItems; + return $this; } + /** * @return string */ @@ -165,15 +187,19 @@ public function getTotalPriceLabel() { return $this->totalPriceLabel; } + /** * @param string $totalPriceLabel + * * @return GooglePayTransactionInfo */ public function setTotalPriceLabel($totalPriceLabel) { $this->totalPriceLabel = $totalPriceLabel; + return $this; } + /** * @return string */ @@ -181,13 +207,16 @@ public function getCheckoutOption() { return $this->checkoutOption; } + /** - * @param string $checkoutOption + * @param 'DEFAULT'|'COMPLETE_IMMEDIATE_PURCHASE' $checkoutOption + * * @return GooglePayTransactionInfo */ public function setCheckoutOption($checkoutOption) { $this->checkoutOption = $checkoutOption; + return $this; } diff --git a/src/PayPal/GooglePay/DTO/index.php b/src/PayPal/GooglePay/DTO/index.php new file mode 100644 index 000000000..296d682e8 --- /dev/null +++ b/src/PayPal/GooglePay/DTO/index.php @@ -0,0 +1,28 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0', false); +header('Pragma: no-cache'); + +header('Location: ../'); +exit; diff --git a/src/PayPal/GooglePay/Query/index.php b/src/PayPal/GooglePay/Query/index.php new file mode 100644 index 000000000..296d682e8 --- /dev/null +++ b/src/PayPal/GooglePay/Query/index.php @@ -0,0 +1,28 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0', false); +header('Pragma: no-cache'); + +header('Location: ../'); +exit; diff --git a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php index 8e2394147..5f13f2c60 100644 --- a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php +++ b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php @@ -20,6 +20,7 @@ namespace PrestaShop\Module\PrestashopCheckout\PayPal\Sdk; +use Configuration; use Exception; use PrestaShop\Module\PrestashopCheckout\CommandBus\CommandBusInterface; use PrestaShop\Module\PrestashopCheckout\Context\PrestaShopContext; @@ -33,7 +34,6 @@ use PrestaShop\Module\PrestashopCheckout\PayPal\PayPalConfiguration; use PrestaShop\Module\PrestashopCheckout\PayPal\PayPalPayLaterConfiguration; use PrestaShop\Module\PrestashopCheckout\ShopContext; -use PrestaShop\PrestaShop\Adapter\Shop\Context; use Psr\Log\LoggerInterface; /** @@ -98,16 +98,16 @@ class PayPalSdkConfigurationBuilder * @param FundingSourceEligibilityConstraint $fundingSourceEligibilityConstraint */ public function __construct( - \Ps_checkout $module, - Env $env, - PayPalConfiguration $configuration, - PayPalPayLaterConfiguration $payLaterConfiguration, + \Ps_checkout $module, + Env $env, + PayPalConfiguration $configuration, + PayPalPayLaterConfiguration $payLaterConfiguration, FundingSourceConfigurationRepository $fundingSourceConfigurationRepository, - ExpressCheckoutConfiguration $expressCheckoutConfiguration, - ShopContext $shopContext, - PrestaShopContext $prestaShopContext, - LoggerInterface $logger, - FundingSourceEligibilityConstraint $fundingSourceEligibilityConstraint + ExpressCheckoutConfiguration $expressCheckoutConfiguration, + ShopContext $shopContext, + PrestaShopContext $prestaShopContext, + LoggerInterface $logger, + FundingSourceEligibilityConstraint $fundingSourceEligibilityConstraint ) { $this->configuration = $configuration; $this->payLaterConfiguration = $payLaterConfiguration; @@ -494,7 +494,7 @@ private function shouldIncludeGooglePayComponent() $fundingSource = $this->fundingSourceConfigurationRepository->get('google_pay'); return $fundingSource && $fundingSource['active'] - && \Configuration::get('PS_CHECKOUT_GOOGLE_PAY', false) === '1' + && Configuration::get('PS_CHECKOUT_GOOGLE_PAY') === '1' && in_array($country, $this->fundingSourceEligibilityConstraint->getCountries('google_pay'), true) && in_array($context->currency->iso_code, $this->fundingSourceEligibilityConstraint->getCurrencies('google_pay'), true); } diff --git a/src/Translations/Translations.php b/src/Translations/Translations.php index c2332bbe7..0a81e47fe 100644 --- a/src/Translations/Translations.php +++ b/src/Translations/Translations.php @@ -544,7 +544,7 @@ public function getTranslations() 'subtotal' => $this->module->l('Subtotal', 'translations'), 'handling' => $this->module->l('Handling', 'translations'), 'discount' => $this->module->l('Discount', 'translations'), - ] + ], ]; return $translations; From 55da8aa60badb47ef2745b694c017a251a363364 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Mon, 8 Jul 2024 11:56:29 +0300 Subject: [PATCH 11/37] Minor improvements --- config/common.yml | 4 ++-- config/query-handlers.yml | 2 +- ...InfoBuilder.php => GooglePayTransactionInfoBuilder.php} | 5 ++--- .../Query/GetGooglePayTransactionInfoQueryHandler.php | 6 +++--- src/PayPal/PayPalConfiguration.php | 7 +++++++ src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php | 3 +-- 6 files changed, 16 insertions(+), 11 deletions(-) rename src/PayPal/GooglePay/Builder/{GoogleTransactionInfoBuilder.php => GooglePayTransactionInfoBuilder.php} (96%) diff --git a/config/common.yml b/config/common.yml index 54bc75f48..8614104f7 100644 --- a/config/common.yml +++ b/config/common.yml @@ -476,8 +476,8 @@ services: arguments: - '@ps_checkout.module' - PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder: - class: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder' + PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GooglePayTransactionInfoBuilder: + class: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GooglePayTransactionInfoBuilder' public: true arguments: - '@PrestaShop\Module\PrestashopCheckout\Translations\Translations' diff --git a/config/query-handlers.yml b/config/query-handlers.yml index 390c6f44a..8997caaa4 100644 --- a/config/query-handlers.yml +++ b/config/query-handlers.yml @@ -85,4 +85,4 @@ services: class: 'PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query\GetGooglePayTransactionInfoQueryHandler' public: true arguments: - - '@PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder' + - '@PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GooglePayTransactionInfoBuilder' diff --git a/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php similarity index 96% rename from src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php rename to src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php index 8b512bb31..59ba84871 100644 --- a/src/PayPal/GooglePay/Builder/GoogleTransactionInfoBuilder.php +++ b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php @@ -25,7 +25,7 @@ use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO\GooglePayTransactionInfo; use PrestaShop\Module\PrestashopCheckout\Translations\Translations; -class GoogleTransactionInfoBuilder +class GooglePayTransactionInfoBuilder { /** * @var Translations @@ -34,8 +34,7 @@ class GoogleTransactionInfoBuilder public function __construct(Translations $translations) { - $isoCode = \Context::getContext()->language->iso_code; - $this->translations = $translations->getTranslations()[$isoCode]['google_pay']; + $this->translations = current($translations->getTranslations())['google_pay']; } /** diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php index 7bd3badd8..228f0bb59 100644 --- a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php @@ -21,17 +21,17 @@ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query; use PrestaShop\Module\PrestashopCheckout\Builder\Payload\OrderPayloadBuilder; -use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GoogleTransactionInfoBuilder; +use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GooglePayTransactionInfoBuilder; use PrestaShop\Module\PrestashopCheckout\Presenter\Cart\CartPresenter; class GetGooglePayTransactionInfoQueryHandler { /** - * @var GoogleTransactionInfoBuilder + * @var GooglePayTransactionInfoBuilder */ private $builder; - public function __construct(GoogleTransactionInfoBuilder $builder) + public function __construct(GooglePayTransactionInfoBuilder $builder) { $this->builder = $builder; } diff --git a/src/PayPal/PayPalConfiguration.php b/src/PayPal/PayPalConfiguration.php index b8b5ae475..6ce9e92cb 100644 --- a/src/PayPal/PayPalConfiguration.php +++ b/src/PayPal/PayPalConfiguration.php @@ -50,6 +50,8 @@ class PayPalConfiguration const PS_CHECKOUT_DISPLAY_LOGO_CART = 'PS_CHECKOUT_DISPLAY_LOGO_CART'; const PS_CHECKOUT_VAULTING = 'PS_CHECKOUT_VAULTING'; + const PS_CHECKOUT_GOOGLE_PAY = 'PS_CHECKOUT_GOOGLE_PAY'; + /** * @var PrestaShopConfiguration */ @@ -441,4 +443,9 @@ public function isVaultingEnabled() { return (bool) $this->configuration->get(static::PS_CHECKOUT_VAULTING); } + + public function isGooglePayEligible() + { + return (bool) $this->configuration->get(static::PS_CHECKOUT_GOOGLE_PAY); + } } diff --git a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php index 5f13f2c60..1042cb48d 100644 --- a/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php +++ b/src/PayPal/Sdk/PayPalSdkConfigurationBuilder.php @@ -20,7 +20,6 @@ namespace PrestaShop\Module\PrestashopCheckout\PayPal\Sdk; -use Configuration; use Exception; use PrestaShop\Module\PrestashopCheckout\CommandBus\CommandBusInterface; use PrestaShop\Module\PrestashopCheckout\Context\PrestaShopContext; @@ -494,7 +493,7 @@ private function shouldIncludeGooglePayComponent() $fundingSource = $this->fundingSourceConfigurationRepository->get('google_pay'); return $fundingSource && $fundingSource['active'] - && Configuration::get('PS_CHECKOUT_GOOGLE_PAY') === '1' + && $this->configuration->isGooglePayEligible() && in_array($country, $this->fundingSourceEligibilityConstraint->getCountries('google_pay'), true) && in_array($context->currency->iso_code, $this->fundingSourceEligibilityConstraint->getCurrencies('google_pay'), true); } From 7817cdb84c891bf8a844248c2656b9bde1bd3294 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 9 Jul 2024 20:07:19 +0300 Subject: [PATCH 12/37] Added GooglePay payment source to order payload builder --- src/Builder/Payload/OrderPayloadBuilder.php | 32 +++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Builder/Payload/OrderPayloadBuilder.php b/src/Builder/Payload/OrderPayloadBuilder.php index 0237debdb..b680e2c47 100644 --- a/src/Builder/Payload/OrderPayloadBuilder.php +++ b/src/Builder/Payload/OrderPayloadBuilder.php @@ -178,8 +178,15 @@ public function buildFullPayload() $this->buildSupplementaryDataNode(); } - if ($this->fundingSource === 'paypal') { - $this->buildPayPalPaymentSourceNode(); + switch ($this->fundingSource) { + case 'paypal': + $this->buildPayPalPaymentSourceNode(); + break; + case 'google_pay': + $this->buildGooglePayPaymentSourceNode(); + break; + default: + break; } } @@ -731,4 +738,25 @@ private function buildPayPalPaymentSourceNode() $this->getPayload()->addAndMergeItems($node); } + + private function buildGooglePayPaymentSourceNode() { + /** @var \Ps_checkout $module */ + $module = \Module::getInstanceByName('ps_checkout'); + /** @var PayPalConfiguration $paypalConfiguration */ + $paypalConfiguration = $module->getService(PayPalConfiguration::class); + + $node = [ + 'payment_source' => [ + 'google_pay' => [ + 'attributes' => [ + 'verification' => [ + 'method' => $paypalConfiguration->getHostedFieldsContingencies(), + ] + ] + ], + ], + ]; + + $this->getPayload()->addAndMergeItems($node); + } } From 62904b5379fce5bf04f8cd43ebc7592dd61c1a3a Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 9 Jul 2024 20:09:09 +0300 Subject: [PATCH 13/37] removed create and capture endpoints from Google Pay controller --- controllers/front/googlepay.php | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/controllers/front/googlepay.php b/controllers/front/googlepay.php index ced8ae7ba..150923a8d 100644 --- a/controllers/front/googlepay.php +++ b/controllers/front/googlepay.php @@ -55,18 +55,10 @@ public function postProcess() $this->commandBus = $this->module->getService('ps_checkout.bus.command'); - switch ($action) { - case 'create': - $this->create($bodyValues); - break; - case 'capture': - $this->capture($bodyValues); - break; - case 'getTransactionInfo': - $this->getTransactionInfo($bodyValues); - break; - default: - $this->exitWithExceptionMessage(new Exception('Invalid request', 400)); + if ($action === 'getTransactionInfo') { + $this->getTransactionInfo($bodyValues); + } else { + $this->exitWithExceptionMessage(new Exception('Invalid request', 400)); } } catch (Exception $exception) { $this->exitWithExceptionMessage($exception); From 5194d4b0fd994bb7e2193ce05ade3507451212f1 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 9 Jul 2024 20:23:10 +0300 Subject: [PATCH 14/37] Added liability shift check for Google Pay --- src/Checkout/CheckoutChecker.php | 6 ++++-- src/PayPal/Card3DSecure.php | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Checkout/CheckoutChecker.php b/src/Checkout/CheckoutChecker.php index 9ffef68a2..de01781d3 100644 --- a/src/Checkout/CheckoutChecker.php +++ b/src/Checkout/CheckoutChecker.php @@ -57,13 +57,15 @@ public function continueWithAuthorization($cartId, $orderPayPal) throw new PsCheckoutException(sprintf('PayPal Order %s is already captured', $orderPayPal['id'])); } - if (isset($orderPayPal['payment_source']['card'])) { + $paymentSource = current(array_keys($orderPayPal['payment_source'])); + + if (in_array($paymentSource, ['card', 'google_pay']) && isset($orderPayPal['payment_source'][$paymentSource])) { $card3DSecure = (new Card3DSecure())->continueWithAuthorization($orderPayPal); $this->logger->info( '3D Secure authentication result', [ - 'authentication_result' => isset($orderPayPal['payment_source']['card']['authentication_result']) ? $orderPayPal['payment_source']['card']['authentication_result'] : null, + 'authentication_result' => isset($orderPayPal['payment_source'][$paymentSource]['authentication_result']) ? $orderPayPal['payment_source'][$paymentSource]['authentication_result'] : null, 'decision' => str_replace( [ (string) Card3DSecure::NO_DECISION, diff --git a/src/PayPal/Card3DSecure.php b/src/PayPal/Card3DSecure.php index 091eec299..9f95764bc 100644 --- a/src/PayPal/Card3DSecure.php +++ b/src/PayPal/Card3DSecure.php @@ -130,9 +130,9 @@ public function is3DSecureAvailable(array $order) */ public function isLiabilityShifted(array $order) { - $cardAuthenticationResult = $this->getAuthenticationResult($order); - $liabilityShift = $this->getLiabilityShift($cardAuthenticationResult); - $threeDSecure = $this->get3DSecure($cardAuthenticationResult); + $authenticationResult = $this->getAuthenticationResult($order); + $liabilityShift = $this->getLiabilityShift($authenticationResult); + $threeDSecure = $this->get3DSecure($authenticationResult); $authenticationStatus = $this->getAuthenticationStatus($threeDSecure); return ($liabilityShift === self::LIABILITY_SHIFT_POSSIBLE || $liabilityShift === self::LIABILITY_SHIFT_YES) @@ -188,27 +188,29 @@ private function noLiabilityShift(array $cardAuthenticationResult) */ private function getAuthenticationResult(array $order) { - return isset($order['payment_source']['card']['authentication_result']) ? $order['payment_source']['card']['authentication_result'] : null; + $fundingSource = current(array_keys($order['payment_source'])); + + return isset($order['payment_source'][$fundingSource]['authentication_result']) ? $order['payment_source'][$fundingSource]['authentication_result'] : null; } /** - * @param array|null $cardAuthenticationResult + * @param array|null $authenticationResult * * @return string|null */ - private function getLiabilityShift($cardAuthenticationResult) + private function getLiabilityShift($authenticationResult) { - return isset($cardAuthenticationResult['liability_shift']) ? $cardAuthenticationResult['liability_shift'] : null; + return isset($authenticationResult['liability_shift']) ? $authenticationResult['liability_shift'] : null; } /** - * @param array|null $cardAuthenticationResult + * @param array|null $authenticationResult * * @return array|null */ - private function get3DSecure($cardAuthenticationResult) + private function get3DSecure($authenticationResult) { - return isset($cardAuthenticationResult['three_d_secure']) ? $cardAuthenticationResult['three_d_secure'] : null; + return isset($authenticationResult['three_d_secure']) ? $authenticationResult['three_d_secure'] : null; } /** From e4bd4ba1bbb6b81e3112e1dc0f5457b5904580e7 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 9 Jul 2024 20:26:43 +0300 Subject: [PATCH 15/37] Updated OrderPresenter with values for Google Pay --- src/Builder/Payload/OrderPayloadBuilder.php | 3 ++- src/Checkout/CheckoutChecker.php | 2 +- src/PayPal/Card3DSecure.php | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Builder/Payload/OrderPayloadBuilder.php b/src/Builder/Payload/OrderPayloadBuilder.php index b680e2c47..008d32f09 100644 --- a/src/Builder/Payload/OrderPayloadBuilder.php +++ b/src/Builder/Payload/OrderPayloadBuilder.php @@ -739,7 +739,8 @@ private function buildPayPalPaymentSourceNode() $this->getPayload()->addAndMergeItems($node); } - private function buildGooglePayPaymentSourceNode() { + private function buildGooglePayPaymentSourceNode() + { /** @var \Ps_checkout $module */ $module = \Module::getInstanceByName('ps_checkout'); /** @var PayPalConfiguration $paypalConfiguration */ diff --git a/src/Checkout/CheckoutChecker.php b/src/Checkout/CheckoutChecker.php index de01781d3..eb292100d 100644 --- a/src/Checkout/CheckoutChecker.php +++ b/src/Checkout/CheckoutChecker.php @@ -57,7 +57,7 @@ public function continueWithAuthorization($cartId, $orderPayPal) throw new PsCheckoutException(sprintf('PayPal Order %s is already captured', $orderPayPal['id'])); } - $paymentSource = current(array_keys($orderPayPal['payment_source'])); + $paymentSource = key($orderPayPal['payment_source']); if (in_array($paymentSource, ['card', 'google_pay']) && isset($orderPayPal['payment_source'][$paymentSource])) { $card3DSecure = (new Card3DSecure())->continueWithAuthorization($orderPayPal); diff --git a/src/PayPal/Card3DSecure.php b/src/PayPal/Card3DSecure.php index 9f95764bc..4c7105bb3 100644 --- a/src/PayPal/Card3DSecure.php +++ b/src/PayPal/Card3DSecure.php @@ -188,7 +188,7 @@ private function noLiabilityShift(array $cardAuthenticationResult) */ private function getAuthenticationResult(array $order) { - $fundingSource = current(array_keys($order['payment_source'])); + $fundingSource = key($order['payment_source']); return isset($order['payment_source'][$fundingSource]['authentication_result']) ? $order['payment_source'][$fundingSource]['authentication_result'] : null; } From e15bc01e03419bbedc6b87e9c360c9aa112a764a Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Wed, 10 Jul 2024 15:56:18 +0300 Subject: [PATCH 16/37] Added error translation for missing Google Pay SDK --- ps_checkout.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ps_checkout.php b/ps_checkout.php index 863512d6d..12420607e 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1086,6 +1086,7 @@ public function hookActionFrontControllerSetMedia() 'express-button.cart.separator' => $this->l('or'), 'express-button.checkout.express-checkout' => $this->l('Express Checkout'), 'error.paypal-sdk' => $this->l('No PayPal Javascript SDK Instance'), + 'error.google-pay-sdk' => $this->l('No Google Pay Javascript SDK Instance'), 'checkout.payment.others.link.label' => $this->l('Other payment methods'), 'checkout.payment.others.confirm.button.label' => $this->l('I confirm my order'), 'checkout.form.error.label' => $this->l('There was an error during the payment. Please try again or contact the support.'), From dc31458295a9e5627688537a49265ce4f7a00465 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Wed, 10 Jul 2024 16:49:23 +0300 Subject: [PATCH 17/37] Added order status check before 3DS check --- src/Builder/Payload/OrderPayloadBuilder.php | 4 ++-- src/Checkout/CheckoutChecker.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Builder/Payload/OrderPayloadBuilder.php b/src/Builder/Payload/OrderPayloadBuilder.php index 008d32f09..6b881b3b1 100644 --- a/src/Builder/Payload/OrderPayloadBuilder.php +++ b/src/Builder/Payload/OrderPayloadBuilder.php @@ -752,8 +752,8 @@ private function buildGooglePayPaymentSourceNode() 'attributes' => [ 'verification' => [ 'method' => $paypalConfiguration->getHostedFieldsContingencies(), - ] - ] + ], + ], ], ], ]; diff --git a/src/Checkout/CheckoutChecker.php b/src/Checkout/CheckoutChecker.php index eb292100d..3cedc3342 100644 --- a/src/Checkout/CheckoutChecker.php +++ b/src/Checkout/CheckoutChecker.php @@ -59,7 +59,8 @@ public function continueWithAuthorization($cartId, $orderPayPal) $paymentSource = key($orderPayPal['payment_source']); - if (in_array($paymentSource, ['card', 'google_pay']) && isset($orderPayPal['payment_source'][$paymentSource])) { + if ((($paymentSource === 'google_pay' && $orderPayPal['status'] !== 'APPROVED') + || $paymentSource === 'card') && isset($orderPayPal['payment_source'][$paymentSource])) { $card3DSecure = (new Card3DSecure())->continueWithAuthorization($orderPayPal); $this->logger->info( From d584a64d1f12561d3e3f79762fd31a19c07403d8 Mon Sep 17 00:00:00 2001 From: Matt75 <5262628+Matt75@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:12:31 +0200 Subject: [PATCH 18/37] Remove unused methods --- controllers/front/googlepay.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/controllers/front/googlepay.php b/controllers/front/googlepay.php index 150923a8d..7734798cc 100644 --- a/controllers/front/googlepay.php +++ b/controllers/front/googlepay.php @@ -65,15 +65,7 @@ public function postProcess() } } - private function create($bodyValues) - { - } - - private function capture($bodyValues) - { - } - - private function getTransactionInfo($bodyValues) + private function getTransactionInfo(array $bodyValues) { $transactionInfo = $this->commandBus->handle(new GetGooglePayTransactionInfoQuery(new CartId($this->context->cart->id))); From 84d2bcc42a20b51981e7a47f5bb3865fe031bae8 Mon Sep 17 00:00:00 2001 From: Matt75 <5262628+Matt75@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:55:17 +0200 Subject: [PATCH 19/37] Refactor conditional statement --- src/Checkout/CheckoutChecker.php | 5 ++--- src/PayPal/Card3DSecure.php | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Checkout/CheckoutChecker.php b/src/Checkout/CheckoutChecker.php index 3cedc3342..60c292ce4 100644 --- a/src/Checkout/CheckoutChecker.php +++ b/src/Checkout/CheckoutChecker.php @@ -57,10 +57,9 @@ public function continueWithAuthorization($cartId, $orderPayPal) throw new PsCheckoutException(sprintf('PayPal Order %s is already captured', $orderPayPal['id'])); } - $paymentSource = key($orderPayPal['payment_source']); + $paymentSource = isset($orderPayPal['payment_source']) ? key($orderPayPal['payment_source']) : ''; - if ((($paymentSource === 'google_pay' && $orderPayPal['status'] !== 'APPROVED') - || $paymentSource === 'card') && isset($orderPayPal['payment_source'][$paymentSource])) { + if (in_array($paymentSource, ['google_pay', 'card'], true)) { $card3DSecure = (new Card3DSecure())->continueWithAuthorization($orderPayPal); $this->logger->info( diff --git a/src/PayPal/Card3DSecure.php b/src/PayPal/Card3DSecure.php index 4c7105bb3..c997ca986 100644 --- a/src/PayPal/Card3DSecure.php +++ b/src/PayPal/Card3DSecure.php @@ -188,7 +188,7 @@ private function noLiabilityShift(array $cardAuthenticationResult) */ private function getAuthenticationResult(array $order) { - $fundingSource = key($order['payment_source']); + $fundingSource = isset($order['payment_source']) ? key($order['payment_source']) : ''; return isset($order['payment_source'][$fundingSource]['authentication_result']) ? $order['payment_source'][$fundingSource]['authentication_result'] : null; } From e74862dca15a1549642eeabb72897422e4ba5395 Mon Sep 17 00:00:00 2001 From: Matt75 <5262628+Matt75@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:57:47 +0200 Subject: [PATCH 20/37] Google pay verification method depends on 3D Secure activation --- src/Builder/Payload/OrderPayloadBuilder.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Builder/Payload/OrderPayloadBuilder.php b/src/Builder/Payload/OrderPayloadBuilder.php index 6b881b3b1..9efb05a2e 100644 --- a/src/Builder/Payload/OrderPayloadBuilder.php +++ b/src/Builder/Payload/OrderPayloadBuilder.php @@ -746,6 +746,10 @@ private function buildGooglePayPaymentSourceNode() /** @var PayPalConfiguration $paypalConfiguration */ $paypalConfiguration = $module->getService(PayPalConfiguration::class); + if (!$paypalConfiguration->is3dSecureEnabled()) { + return; + } + $node = [ 'payment_source' => [ 'google_pay' => [ From db8b75008639d1f7ee6045bb6d01eeee65cbda1e Mon Sep 17 00:00:00 2001 From: Matt75 <5262628+Matt75@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:04:31 +0200 Subject: [PATCH 21/37] Remove custom path --- ps_checkout.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ps_checkout.php b/ps_checkout.php index 12420607e..3cf7fa5ea 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1108,8 +1108,7 @@ public function hookActionFrontControllerSetMedia() if (method_exists($this->context->controller, 'registerJavascript')) { $this->context->controller->registerJavascript( $this->name . 'Front', - 'https://fo-sdk.laurynas-sedys-ext-mytun.prestashop.name/ps_checkout-fo-sdk.js', -// $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), + $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), [ 'position' => 'bottom', 'priority' => 201, From 9f9aa3819f433baca007537e9fbdfa5cf9703696 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 11 Jul 2024 12:15:16 +0300 Subject: [PATCH 22/37] Removed front build scripts --- .github/workflows/build-release.yml | 6 ------ package.json | 27 --------------------------- 2 files changed, 33 deletions(-) delete mode 100644 package.json diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 37bf5ee14..ab12488ba 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -33,12 +33,6 @@ jobs: GCLOUD_CLUSTER: ${{ secrets.GCLOUD_CLUSTER }} GCLOUD_PROJECT: ${{ secrets.GCLOUD_PROJECT_PRODUCTION }} - - name: Build JS dependencies - uses: PrestaShopCorp/github-action-build-js/12@v1.0 - with: - cmd: npm - path: ./ - - name: Install composer dependencies run: composer install --no-dev -o diff --git a/package.json b/package.json deleted file mode 100644 index a56ead3f9..000000000 --- a/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "author": "PrestaShop", - "name": "ps_checkout", - "homepage": "https://github.com/PrestaShopCorp/ps_checkout", - "repository": { - "type": "git", - "url": "git+https://github.com/PrestaShopCorp/ps_checkout.git" - }, - "scripts": { - "build": "npm run front:build", - "front:build": "npm run build --prefix ./_dev/js/front", - "front:coverage": "npm run coverage --prefix ./_dev/js/front", - "front:install": "npm i --prefix ./_dev/js/front", - "front:test": "npm test --prefix ./_dev/js/front", - "front:watch": "npm run watch --prefix ./_dev/js/front", - "lint": "", - "postback:build": "rm ./_dev/js/back/.env", - "postfront:build": "rm ./_dev/js/front/.env", - "prefront:build": "cp ./.env ./_dev/js/front/.", - "postfront:watch": "rm ./_dev/js/front/.env", - "prefront:watch": "cp ./.env ./_dev/js/front/.", - "preinstall": "npm run front:install", - "test": "npm run front:test" - }, - "license": "AFL-3.0", - "private": true -} From b3f14a7a146f3d4a933ccded791496979381155d Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 11 Jul 2024 12:38:36 +0300 Subject: [PATCH 23/37] Removed js workflow --- .github/workflows/js.yml | 14 -------------- ps_checkout.php | 1 - 2 files changed, 15 deletions(-) delete mode 100644 .github/workflows/js.yml diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml deleted file mode 100644 index 5ee41112c..000000000 --- a/.github/workflows/js.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: JS tests -on: [push, pull_request] -jobs: - js-linter: - name: JS linter - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2.0.0 - - name: lint js dependencies - uses: PrestaShopCorp/github-action-lint-js/12@v1.0 - with: - cmd: npm - path: ./ diff --git a/ps_checkout.php b/ps_checkout.php index b2aeee191..ad4ba42cc 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1099,7 +1099,6 @@ public function hookActionFrontControllerSetMedia() ], ]); - /** @var \PrestaShop\Module\PrestashopCheckout\Environment\Env $env */ $env = $this->getService(\PrestaShop\Module\PrestashopCheckout\Environment\Env::class); From aecc24d4dcaa4d169cc902eec7f476e0559a1bc7 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 12 Jul 2024 16:16:09 +0300 Subject: [PATCH 24/37] Added front office SDK version to env --- ps_checkout.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ps_checkout.php b/ps_checkout.php index ad4ba42cc..aefffb4bd 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1102,12 +1102,23 @@ public function hookActionFrontControllerSetMedia() /** @var \PrestaShop\Module\PrestashopCheckout\Environment\Env $env */ $env = $this->getService(\PrestaShop\Module\PrestashopCheckout\Environment\Env::class); - $foSDkUrl = $env->getEnv('CHECKOUT_FO_SDK_URL'); + $foSdkUrl = $env->getEnv('CHECKOUT_FO_SDK_URL'); + if (substr($foSdkUrl, -3) !== '.js') { + $foSdkVersion = $env->getEnv('CHECKOUT_FO_SDK_VERSION'); + if (empty($foSdkVersion)) { + /** @var \PrestaShop\Module\PrestashopCheckout\Version\Version $version */ + $version = $this->getService('ps_checkout.module.version'); + $majorModuleVersion = explode('.', $version->getSemVersion())[0]; + $foSdkVersion = "$majorModuleVersion.X.X"; + } + + $foSdkUrl = $foSdkUrl . $foSdkVersion . '/sdk/ps_checkout-fo-sdk.js'; + } if (method_exists($this->context->controller, 'registerJavascript')) { $this->context->controller->registerJavascript( $this->name . 'Front', - $foSDkUrl, + $foSdkUrl, [ 'position' => 'bottom', 'priority' => 201, @@ -1115,7 +1126,7 @@ public function hookActionFrontControllerSetMedia() ] ); } else { - $this->context->controller->addJS($foSDkUrl, false); + $this->context->controller->addJS($foSdkUrl, false); } } From f1d7cee5a5106d97f2532ab6d9f0dabbe63b8408 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Mon, 15 Jul 2024 13:07:26 +0300 Subject: [PATCH 25/37] Added Environment for Google Pay --- ps_checkout.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/ps_checkout.php b/ps_checkout.php index f5ed06b5d..fd077478f 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1050,6 +1050,7 @@ public function hookActionFrontControllerSetMedia() $this->name . 'HostedFieldsEnabled' => $isCardAvailable && $payPalConfiguration->isHostedFieldsEnabled() && in_array($payPalConfiguration->getCardHostedFieldsStatus(), ['SUBSCRIBED', 'LIMITED'], true), $this->name . 'HostedFieldsSelected' => false !== $psCheckoutCart && $psCheckoutCart->isHostedFields(), $this->name . 'HostedFieldsContingencies' => $payPalConfiguration->getHostedFieldsContingencies(), + $this->name . 'PayPalEnvironment' => $payPalConfiguration->getPaymentMode(), $this->name . 'ExpressCheckoutSelected' => false !== $psCheckoutCart && $psCheckoutCart->isExpressCheckout(), $this->name . 'ExpressCheckoutProductEnabled' => $expressCheckoutConfiguration->isProductPageEnabled() && $payPalConfiguration->isPayPalPaymentsReceivable(), $this->name . 'ExpressCheckoutCartEnabled' => $expressCheckoutConfiguration->isOrderPageEnabled() && $payPalConfiguration->isPayPalPaymentsReceivable(), @@ -1115,10 +1116,26 @@ public function hookActionFrontControllerSetMedia() ], ]); + /** @var \PrestaShop\Module\PrestashopCheckout\Environment\Env $env */ + $env = $this->getService(\PrestaShop\Module\PrestashopCheckout\Environment\Env::class); + + $foSdkUrl = $env->getEnv('CHECKOUT_FO_SDK_URL'); + if (substr($foSdkUrl, -3) !== '.js') { + $foSdkVersion = $env->getEnv('CHECKOUT_FO_SDK_VERSION'); + if (empty($foSdkVersion)) { + /** @var \PrestaShop\Module\PrestashopCheckout\Version\Version $version */ + $version = $this->getService('ps_checkout.module.version'); + $majorModuleVersion = explode('.', $version->getSemVersion())[0]; + $foSdkVersion = "$majorModuleVersion.X.X"; + } + + $foSdkUrl = $foSdkUrl . $foSdkVersion . '/sdk/ps_checkout-fo-sdk.js'; + } + if (method_exists($this->context->controller, 'registerJavascript')) { $this->context->controller->registerJavascript( $this->name . 'Front', - $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), + $foSdkUrl, [ 'position' => 'bottom', 'priority' => 201, @@ -1126,10 +1143,7 @@ public function hookActionFrontControllerSetMedia() ] ); } else { - $this->context->controller->addJS( - $this->getPathUri() . 'views/js/front.js?version=' . $version->getSemVersion(), - false - ); + $this->context->controller->addJS($foSdkUrl, false); } } From 4498d60bb19ddaa44663647dfb9000b5aea6e3fb Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Mon, 15 Jul 2024 16:40:53 +0300 Subject: [PATCH 26/37] Added merchantInfo to transactionInfo payload --- .../GooglePayTransactionInfoBuilder.php | 7 +- .../DTO/GooglePayTransactionInfo.php | 25 ++++ src/PayPal/GooglePay/DTO/MerchantInfo.php | 111 ++++++++++++++++++ 3 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 src/PayPal/GooglePay/DTO/MerchantInfo.php diff --git a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php index 59ba84871..8eecc6665 100644 --- a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php +++ b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php @@ -23,6 +23,7 @@ use PrestaShop\Module\PrestashopCheckout\Exception\PsCheckoutException; use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO\GooglePayDisplayItem; use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO\GooglePayTransactionInfo; +use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO\MerchantInfo; use PrestaShop\Module\PrestashopCheckout\Translations\Translations; class GooglePayTransactionInfoBuilder @@ -98,10 +99,14 @@ public function buildFromPayPalPayload($payload) $displayItems = array_merge($productItems, $displayItems); + $merchantInfo = new MerchantInfo(); + $merchantInfo->setMerchantName($payload['application_context']['brand_name']); + $transactionInfo->setCurrencyCode($payload['amount']['currency_code']) ->setTotalPrice($payload['amount']['value']) ->setTotalPriceLabel($this->translations['total']) - ->setDisplayItems($displayItems); + ->setDisplayItems($displayItems) + ->setMerchantInfo($merchantInfo); return $transactionInfo; } diff --git a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php index 7869df2ca..3eb915eea 100644 --- a/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php +++ b/src/PayPal/GooglePay/DTO/GooglePayTransactionInfo.php @@ -59,6 +59,10 @@ class GooglePayTransactionInfo * @var 'DEFAULT'|'COMPLETE_IMMEDIATE_PURCHASE' */ private $checkoutOption = self::CHECKOUT_OPTION_DEFAULT; + /** + * @var MerchantInfo + */ + private $merchantInfo; /** * @return string @@ -220,6 +224,26 @@ public function setCheckoutOption($checkoutOption) return $this; } + /** + * @param MerchantInfo $merchantInfo + * + * @return GooglePayTransactionInfo + */ + public function setMerchantInfo($merchantInfo) + { + $this->merchantInfo = $merchantInfo; + + return $this; + } + + /** + * @return MerchantInfo + */ + public function getMerchantInfo() + { + return $this->merchantInfo; + } + public function toArray() { return array_filter([ @@ -233,6 +257,7 @@ public function toArray() 'displayItems' => array_map(function (GooglePayDisplayItem $item) { return $item->toArray(); }, $this->displayItems), + 'merchantInfo' => $this->merchantInfo->toArray(), ]); } } diff --git a/src/PayPal/GooglePay/DTO/MerchantInfo.php b/src/PayPal/GooglePay/DTO/MerchantInfo.php new file mode 100644 index 000000000..739b1a322 --- /dev/null +++ b/src/PayPal/GooglePay/DTO/MerchantInfo.php @@ -0,0 +1,111 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\DTO; + +class MerchantInfo +{ + /** + * @var string + */ + private $merchantName; + + /** + * @var string + */ + private $merchantId; + + /** + * @var string + */ + private $merchantOrigin; + + /** + * @return string + */ + public function getMerchantName() + { + return $this->merchantName; + } + + /** + * @param string $merchantName + * + * @return MerchantInfo + */ + public function setMerchantName($merchantName) + { + $this->merchantName = $merchantName; + + return $this; + } + + /** + * @return string + */ + public function getMerchantId() + { + return $this->merchantId; + } + + /** + * @param string $merchantId + * + * @return MerchantInfo + */ + public function setMerchantId($merchantId) + { + $this->merchantId = $merchantId; + + return $this; + } + + /** + * @return string + */ + public function getMerchantOrigin() + { + return $this->merchantOrigin; + } + + /** + * @param string $merchantOrigin + * + * @return MerchantInfo + */ + public function setMerchantOrigin($merchantOrigin) + { + $this->merchantOrigin = $merchantOrigin; + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + return array_filter([ + 'merchantName' => $this->merchantName, + 'merchantId' => $this->merchantId, + 'merchantOrigin' => $this->merchantOrigin, + ]); + } +} From 06d08573bbad3fd9c986b7b9a12f5cc82ba232d8 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 16 Jul 2024 17:26:08 +0300 Subject: [PATCH 27/37] Added upgrade script for Google Pay funding source creation --- ps_checkout.php | 4 +-- upgrade/upgrade-8.4.1.0.php | 70 +++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 upgrade/upgrade-8.4.1.0.php diff --git a/ps_checkout.php b/ps_checkout.php index fd077478f..3371bf4d6 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -113,7 +113,7 @@ class Ps_checkout extends PaymentModule // Needed in order to retrieve the module version easier (in api call headers) than instanciate // the module each time to get the version - const VERSION = '8.4.0.1'; + const VERSION = '8.4.1.0'; const INTEGRATION_DATE = '2024-04-01'; @@ -134,7 +134,7 @@ public function __construct() // We cannot use the const VERSION because the const is not computed by addons marketplace // when the zip is uploaded - $this->version = '8.4.0.1'; + $this->version = '8.4.1.0'; $this->author = 'PrestaShop'; $this->currencies = true; $this->currencies_mode = 'checkbox'; diff --git a/upgrade/upgrade-8.4.1.0.php b/upgrade/upgrade-8.4.1.0.php new file mode 100644 index 000000000..c569fa111 --- /dev/null +++ b/upgrade/upgrade-8.4.1.0.php @@ -0,0 +1,70 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +/** + * Update main function for module version 8.4.1.0 + * + * @param Ps_checkout $module + * + * @return bool + */ +function upgrade_module_8_4_1_0($module) +{ + try { + $db = Db::getInstance(); + $shopsList = \Shop::getShops(false, null, true); + + foreach ($shopsList as $shopId) { + $isGooglePayEligible = (bool) \Configuration::get( + 'PS_CHECKOUT_GOOGLE_PAY', + null, + null, + $shopId + ); + $hasFundingSourceGooglePay = (bool) $db->getValue(' + SELECT 1 + FROM `' . _DB_PREFIX_ . 'pscheckout_funding_source` + WHERE `name` = "google_pay" + AND `id_shop` = ' . (int) $shopId + ); + + if (!$hasFundingSourceGooglePay) { + $db->insert( + 'pscheckout_funding_source', + [ + 'name' => 'google_pay', + 'position' => 11, + 'active' => (int) $isGooglePayEligible, + 'id_shop' => (int) $shopId, + ] + ); + } + } + } catch (Exception $exception) { + PrestaShopLogger::addLog($exception->getMessage(), 4, 1, 'Module', $module->id); + + return false; + } + + return true; +} From 8220397a7160c4252500acd89836feedac75fa5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BIDAULT?= Date: Thu, 18 Jul 2024 12:03:43 +0200 Subject: [PATCH 28/37] Remove npm build from zip generation workflow (#1251) --- .github/workflows/ps8-build-release.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.github/workflows/ps8-build-release.yml b/.github/workflows/ps8-build-release.yml index 366d4a24f..f9bb8caef 100644 --- a/.github/workflows/ps8-build-release.yml +++ b/.github/workflows/ps8-build-release.yml @@ -54,12 +54,6 @@ jobs: env: GCP_PROJECT: ${{ secrets.GCP_PROJECT_INTEGRATION }} - - name: Build JS dependencies - uses: PrestaShopCorp/github-action-build-js/12@v1.0 - with: - cmd: npm - path: ./ - - name: Install composer dependencies run: composer install --no-dev -o @@ -104,12 +98,6 @@ jobs: env: GCP_PROJECT: ${{ secrets.GCP_PROJECT_PREPRODUCTION }} - - name: Build JS dependencies - uses: PrestaShopCorp/github-action-build-js/12@v1.0 - with: - cmd: npm - path: ./ - - name: Install composer dependencies run: composer install --no-dev -o @@ -152,12 +140,6 @@ jobs: env: GCLOUD_PROJECT: ${{ secrets.GCLOUD_PROJECT_PRODUCTION }} - - name: Build JS dependencies - uses: PrestaShopCorp/github-action-build-js/12@v1.0 - with: - cmd: npm - path: ./ - - name: Install composer dependencies run: composer install --no-dev -o From eed47eba50a80db4811577f1738219c1edc2b734 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 18 Jul 2024 13:10:54 +0300 Subject: [PATCH 29/37] Remove package.lock --- package-lock.json | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 06824f98b..000000000 --- a/package-lock.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "ps_checkout", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "hasInstallScript": true, - "license": "AFL-3.0" - } - } -} From 309cb381ebef8aa42c4c603a2b4218dd289ffd7f Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 18 Jul 2024 16:01:25 +0300 Subject: [PATCH 30/37] Bumped module version in config.xml --- config.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.xml b/config.xml index 03de9314e..da679e8ac 100644 --- a/config.xml +++ b/config.xml @@ -2,7 +2,7 @@ ps_checkout - + From b9558581b8572f2784bf9c8b8d8dfa906e469c35 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Fri, 19 Jul 2024 17:12:21 +0300 Subject: [PATCH 31/37] Added product price multiplying by amount in google transaction info --- .../GooglePay/Builder/GooglePayTransactionInfoBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php index 8eecc6665..44f8c49f6 100644 --- a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php +++ b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php @@ -90,7 +90,7 @@ public function buildFromPayPalPayload($payload) $productItems = array_map(function ($item) { $productItem = new GooglePayDisplayItem(); - $productItem->setPrice($item['unit_amount']['value']) + $productItem->setPrice($this->formatAmount($item['unit_amount']['value'] * $item['quantity'], $item['unit_amount']['currency_code'])) ->setType(GooglePayDisplayItem::TYPE_LINE_ITEM) ->setLabel($item['name'] . ' ' . $item['description'] . ' x' . $item['quantity']); From 15a0f9eb0480c6c0eca084c8849a2a0dcf4cdc1f Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Mon, 22 Jul 2024 11:07:58 +0300 Subject: [PATCH 32/37] Added function to get minimal transaction info payload --- .../GooglePayTransactionInfoBuilder.php | 20 +++++++++++++++++++ ...etGooglePayTransactionInfoQueryHandler.php | 10 +++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php index 44f8c49f6..f9569fd4d 100644 --- a/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php +++ b/src/PayPal/GooglePay/Builder/GooglePayTransactionInfoBuilder.php @@ -111,6 +111,26 @@ public function buildFromPayPalPayload($payload) return $transactionInfo; } + /** + * @return GooglePayTransactionInfo + * + * @throws PsCheckoutException + */ + public function buildMinimalTransactionInfoFromPayPalPayload($payload) + { + $transactionInfo = new GooglePayTransactionInfo(); + + $merchantInfo = new MerchantInfo(); + $merchantInfo->setMerchantName($payload['application_context']['brand_name']); + + $transactionInfo->setCurrencyCode($payload['amount']['currency_code']) + ->setTotalPrice($payload['amount']['value']) + ->setTotalPriceLabel($this->translations['total']) + ->setMerchantInfo($merchantInfo); + + return $transactionInfo; + } + /** * Get decimal to round correspondent to the payment currency used * Advise from PayPal: Always round to 2 decimals except for HUF, JPY and TWD diff --git a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php index 228f0bb59..4e0f5fe93 100644 --- a/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php +++ b/src/PayPal/GooglePay/Query/GetGooglePayTransactionInfoQueryHandler.php @@ -21,6 +21,7 @@ namespace PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Query; use PrestaShop\Module\PrestashopCheckout\Builder\Payload\OrderPayloadBuilder; +use PrestaShop\Module\PrestashopCheckout\Exception\PsCheckoutException; use PrestaShop\Module\PrestashopCheckout\PayPal\GooglePay\Builder\GooglePayTransactionInfoBuilder; use PrestaShop\Module\PrestashopCheckout\Presenter\Cart\CartPresenter; @@ -36,6 +37,13 @@ public function __construct(GooglePayTransactionInfoBuilder $builder) $this->builder = $builder; } + /** + * @param GetGooglePayTransactionInfoQuery $query + * + * @return GetGooglePayTransactionInfoQueryResult + * + * @throws PsCheckoutException + */ public function handle(GetGooglePayTransactionInfoQuery $query) { $cartPresenter = (new CartPresenter())->present(); @@ -44,6 +52,6 @@ public function handle(GetGooglePayTransactionInfoQuery $query) $orderPayloadBuilder->buildFullPayload(); $payload = $orderPayloadBuilder->presentPayload(); - return new GetGooglePayTransactionInfoQueryResult($this->builder->buildFromPayPalPayload($payload->getArray())); + return new GetGooglePayTransactionInfoQueryResult($this->builder->buildMinimalTransactionInfoFromPayPalPayload($payload->getArray())); } } From 5a6c84ec47a671b7110b7c420dc9ce1cd81df15a Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 25 Jul 2024 16:55:26 +0300 Subject: [PATCH 33/37] Added Http timeout error handling --- src/Http/MaaslandHttpClient.php | 15 ++++++++++++++- .../CapturePayPalOrderCommandHandler.php | 8 ++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Http/MaaslandHttpClient.php b/src/Http/MaaslandHttpClient.php index 7c16d6c54..632fd93f8 100644 --- a/src/Http/MaaslandHttpClient.php +++ b/src/Http/MaaslandHttpClient.php @@ -25,6 +25,7 @@ use Http\Client\Exception\NetworkException; use Http\Client\Exception\RequestException; use Http\Client\Exception\TransferException; +use PrestaShop\Module\PrestashopCheckout\Exception\HttpTimeoutException; use PrestaShop\Module\PrestashopCheckout\Exception\PayPalException; use PrestaShop\Module\PrestashopCheckout\PayPalError; use Psr\Http\Message\RequestInterface; @@ -53,6 +54,7 @@ public function __construct(HttpClientInterface $httpClient) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function createOrder(array $payload, array $options = []) { @@ -70,6 +72,7 @@ public function createOrder(array $payload, array $options = []) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function updateOrder(array $payload, array $options = []) { @@ -87,6 +90,7 @@ public function updateOrder(array $payload, array $options = []) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function fetchOrder(array $payload, array $options = []) { @@ -104,6 +108,7 @@ public function fetchOrder(array $payload, array $options = []) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function captureOrder(array $payload, array $options = []) { @@ -121,6 +126,7 @@ public function captureOrder(array $payload, array $options = []) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function refundOrder(array $payload, array $options = []) { @@ -137,6 +143,7 @@ public function refundOrder(array $payload, array $options = []) * @throws RequestException * @throws TransferException * @throws PayPalException + * @throws HttpTimeoutException */ public function sendRequest(RequestInterface $request) { @@ -144,7 +151,13 @@ public function sendRequest(RequestInterface $request) $response = $this->httpClient->sendRequest($request); } catch (HttpException $exception) { $response = $exception->getResponse(); - $message = $this->extractMessage(json_decode($response->getBody(), true)); + $body = json_decode($response->getBody(), true); + + if (isset($body['isResponseUndefined']) && $body['isResponseUndefined']) { + throw new HttpTimeoutException($exception->getMessage(), $exception->getCode(), $exception); + } + + $message = $this->extractMessage($body); if ($message) { (new PayPalError($message))->throwException($exception); diff --git a/src/PayPal/Order/CommandHandler/CapturePayPalOrderCommandHandler.php b/src/PayPal/Order/CommandHandler/CapturePayPalOrderCommandHandler.php index 5d5219c97..eb42059fb 100644 --- a/src/PayPal/Order/CommandHandler/CapturePayPalOrderCommandHandler.php +++ b/src/PayPal/Order/CommandHandler/CapturePayPalOrderCommandHandler.php @@ -58,7 +58,7 @@ class CapturePayPalOrderCommandHandler /** * @var MaaslandHttpClient */ - private $httpClient; + private $maaslandHttpClient; /** * @var PrestaShopContext */ @@ -73,14 +73,14 @@ class CapturePayPalOrderCommandHandler private $payPalOrderRepository; public function __construct( - MaaslandHttpClient $httpClient, + MaaslandHttpClient $maaslandHttpClient, EventDispatcherInterface $eventDispatcher, CacheInterface $orderPayPalCache, PrestaShopContext $prestaShopContext, PayPalCustomerRepository $payPalCustomerRepository, PayPalOrderRepository $payPalOrderRepository ) { - $this->httpClient = $httpClient; + $this->maaslandHttpClient = $maaslandHttpClient; $this->eventDispatcher = $eventDispatcher; $this->orderPayPalCache = $orderPayPalCache; $this->prestaShopContext = $prestaShopContext; @@ -105,7 +105,7 @@ public function handle(CapturePayPalOrderCommand $capturePayPalOrderCommand) $payload['vault'] = true; } - $response = $this->httpClient->captureOrder($payload); + $response = $this->maaslandHttpClient->captureOrder($payload); $orderPayPal = json_decode($response->getBody(), true); From a85158ca948c2a89dc7819630bb318723c002798 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 30 Jul 2024 16:04:05 +0300 Subject: [PATCH 34/37] Added funding source creation after shop add --- ps_checkout.php | 1 + .../FundingSourceConfigurationRepository.php | 11 ++++++++--- src/FundingSource/FundingSourceInstaller.php | 6 ++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ps_checkout.php b/ps_checkout.php index 3371bf4d6..61e07fce0 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -1384,6 +1384,7 @@ public function hookActionObjectShopAddAfter(array $params) Configuration::set($name, $value, (int) $shop->id_shop_group, (int) $shop->id); } + (new PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceInstaller())->createFundingSources((int) $shop->id); $this->addCheckboxCarrierRestrictionsForModule([(int) $shop->id]); $this->addCheckboxCountryRestrictionsForModule([(int) $shop->id]); diff --git a/src/FundingSource/FundingSourceConfigurationRepository.php b/src/FundingSource/FundingSourceConfigurationRepository.php index c4936eaa3..ec14d53fd 100644 --- a/src/FundingSource/FundingSourceConfigurationRepository.php +++ b/src/FundingSource/FundingSourceConfigurationRepository.php @@ -94,11 +94,16 @@ public function getAll() /** * @param array $data + * @param int|null $shopId * * @return bool + * + * @throws \PrestaShopDatabaseException */ - public function save($data) + public function save($data, $shopId = null) { + $shopId = (int) ($shopId === null ? $this->context->getShopId() : $shopId); + if ($this->get($data['name'])) { return (bool) $this->db->update( 'pscheckout_funding_source', @@ -106,7 +111,7 @@ public function save($data) 'position' => (int) $data['position'], 'active' => (int) $data['isEnabled'], ], - '`name` = "' . pSQL($data['name']) . '" AND `id_shop` = ' . (int) $this->context->getShopId() + '`name` = "' . pSQL($data['name']) . '" AND `id_shop` = ' . $shopId ); } @@ -116,7 +121,7 @@ public function save($data) 'name' => pSQL($data['name']), 'position' => (int) $data['position'], 'active' => (int) $data['isEnabled'], - 'id_shop' => (int) $this->context->getShopId(), + 'id_shop' => $shopId, ] ); } diff --git a/src/FundingSource/FundingSourceInstaller.php b/src/FundingSource/FundingSourceInstaller.php index e764707c1..14ab5b276 100644 --- a/src/FundingSource/FundingSourceInstaller.php +++ b/src/FundingSource/FundingSourceInstaller.php @@ -27,9 +27,11 @@ class FundingSourceInstaller /** * Saves Funding Sources for the first time into the database * + * @param int|null $shopId + * * @return bool */ - public function createFundingSources() + public function createFundingSources($shopId = null) { $fundingSourceConfigurationRepository = new FundingSourceConfigurationRepository(new PrestaShopContext()); $fundingSourceCollectionBuilder = new FundingSourceCollectionBuilder( @@ -43,7 +45,7 @@ public function createFundingSources() 'name' => $fundingSourceEntity->getName(), 'position' => $fundingSourceEntity->getPosition(), 'isEnabled' => $fundingSourceEntity->getIsEnabled() ? 1 : 0, - ]); + ], $shopId); } return true; From 3cb3e89f7bc7c765b6dfdeda0c9232660eef19d5 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Tue, 30 Jul 2024 16:12:39 +0300 Subject: [PATCH 35/37] Fixed funding source creation on multishop --- ps_checkout.php | 2 +- src/FundingSource/FundingSourceInstaller.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ps_checkout.php b/ps_checkout.php index 61e07fce0..498ee83ba 100755 --- a/ps_checkout.php +++ b/ps_checkout.php @@ -172,7 +172,7 @@ public function install() $this->installConfiguration() && $this->installHooks() && (new PrestaShop\Module\PrestashopCheckout\Database\TableManager())->createTable() && - (new PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceInstaller())->createFundingSources() && + (new PrestaShop\Module\PrestashopCheckout\FundingSource\FundingSourceInstaller())->createFundingSourcesOnAllShops() && $this->installTabs() && $this->disableIncompatibleCountries() && $this->disableIncompatibleCurrencies(); diff --git a/src/FundingSource/FundingSourceInstaller.php b/src/FundingSource/FundingSourceInstaller.php index 14ab5b276..ddc811491 100644 --- a/src/FundingSource/FundingSourceInstaller.php +++ b/src/FundingSource/FundingSourceInstaller.php @@ -50,4 +50,15 @@ public function createFundingSources($shopId = null) return true; } + + public function createFundingSourcesOnAllShops() + { + $result = true; + + foreach (\Shop::getShops(false, null, true) as $shopId) { + $result &= $this->createFundingSources((int) $shopId); + } + + return $result; + } } From b125e5867f631cd0ad1bf8695386017ad162afaa Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Wed, 31 Jul 2024 12:00:39 +0300 Subject: [PATCH 36/37] added shopId parameter for fetching funding sources --- .../FundingSourceConfigurationRepository.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/FundingSource/FundingSourceConfigurationRepository.php b/src/FundingSource/FundingSourceConfigurationRepository.php index ec14d53fd..6d3c82dda 100644 --- a/src/FundingSource/FundingSourceConfigurationRepository.php +++ b/src/FundingSource/FundingSourceConfigurationRepository.php @@ -50,12 +50,13 @@ public function __construct(PrestaShopContext $context) /** * @param string $name + * @param int|null $shopId * * @return array|null */ - public function get($name) + public function get($name, $shopId = null) { - $fundingSources = $this->getAll(); + $fundingSources = $this->getAll($shopId); if (null === $fundingSources) { return null; @@ -71,10 +72,14 @@ public function get($name) } /** + * @param int|null $shopId + * * @return array|null */ - public function getAll() + public function getAll($shopId = null) { + $shopId = (int) ($shopId === null ? $this->context->getShopId() : $shopId); + if (null !== $this->fundingSources) { return $this->fundingSources; } @@ -82,7 +87,7 @@ public function getAll() $data = $this->db->executeS(' SELECT `name`, `active`, `position` FROM `' . _DB_PREFIX_ . 'pscheckout_funding_source` - WHERE `id_shop` = ' . (int) $this->context->getShopId() + WHERE `id_shop` = ' . $shopId ); if (!empty($data)) { @@ -104,7 +109,7 @@ public function save($data, $shopId = null) { $shopId = (int) ($shopId === null ? $this->context->getShopId() : $shopId); - if ($this->get($data['name'])) { + if ($this->get($data['name'], $shopId)) { return (bool) $this->db->update( 'pscheckout_funding_source', [ From 6c05c2831a21a29ce1bbc1217ef9b33d3b45bdf5 Mon Sep 17 00:00:00 2001 From: L3RAZ Date: Thu, 1 Aug 2024 17:13:26 +0300 Subject: [PATCH 37/37] Fixed funding source cache --- .../FundingSourceConfigurationRepository.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/FundingSource/FundingSourceConfigurationRepository.php b/src/FundingSource/FundingSourceConfigurationRepository.php index 6d3c82dda..6e0ce9863 100644 --- a/src/FundingSource/FundingSourceConfigurationRepository.php +++ b/src/FundingSource/FundingSourceConfigurationRepository.php @@ -80,8 +80,8 @@ public function getAll($shopId = null) { $shopId = (int) ($shopId === null ? $this->context->getShopId() : $shopId); - if (null !== $this->fundingSources) { - return $this->fundingSources; + if (isset($this->fundingSources[$shopId]) && null !== $this->fundingSources[$shopId]) { + return $this->fundingSources[$shopId]; } $data = $this->db->executeS(' @@ -91,10 +91,10 @@ public function getAll($shopId = null) ); if (!empty($data)) { - $this->fundingSources = $data; + $this->fundingSources[$shopId] = $data; } - return $this->fundingSources; + return isset($this->fundingSources[$shopId]) ? $this->fundingSources[$shopId] : null; } /** @@ -109,6 +109,8 @@ public function save($data, $shopId = null) { $shopId = (int) ($shopId === null ? $this->context->getShopId() : $shopId); + $this->fundingSources[$shopId] = null; + if ($this->get($data['name'], $shopId)) { return (bool) $this->db->update( 'pscheckout_funding_source',