From f06f7f9461702765f728d5248345b4cc455bed3a Mon Sep 17 00:00:00 2001 From: Ildar Galeev Date: Wed, 16 Aug 2023 18:48:04 +0300 Subject: [PATCH] TD-697: Bump typescript, prettier, eslint (#228) --- .eslintrc.js | 55 + .github/workflows/basic-linters.yml | 10 +- .github/workflows/pr.yaml | 31 +- .prettierignore | 31 - .prettierrc | 2 - checkout.html | 2 +- crowdin.yml | 4 +- jest.config.js | 4 +- package-lock.json | 6937 ++++++++--------- package.json | 23 +- .../backend/create-invoice-with-template.ts | 7 +- src/app/backend/create-payment-resource.ts | 7 +- src/app/backend/create-payment.ts | 6 +- src/app/backend/fetch-capi.spec.ts | 36 +- src/app/backend/fetch-capi.ts | 8 +- src/app/backend/get-app-config.ts | 3 +- src/app/backend/get-env.ts | 1 + src/app/backend/get-invoice-events.ts | 5 +- ...-invoice-payment-methods-by-template-id.ts | 4 +- .../backend/get-invoice-payment-methods.ts | 4 +- src/app/backend/get-invoice-template.ts | 4 +- src/app/backend/get-invoice.ts | 2 +- src/app/backend/get-locale.ts | 7 +- src/app/backend/get-service-provider-by-id.ts | 4 +- src/app/backend/model/bank-card.ts | 3 +- src/app/backend/model/digital-wallet.ts | 3 +- .../model/event/invoice-change-type.ts | 2 +- .../backend/model/event/invoice-created.ts | 3 +- src/app/backend/model/event/invoice-event.ts | 1 + .../model/event/invoice-status-changed.ts | 2 +- .../backend/model/event/payment-started.ts | 2 +- .../model/event/payment-status-changed.ts | 5 +- .../event/user-interaction/interation-type.ts | 2 +- .../model/event/user-interaction/redirect.ts | 2 +- .../event/user-interaction/request-type.ts | 2 +- src/app/backend/model/invoice-status.ts | 2 +- .../model/invoice-template-and-token.ts | 2 +- .../invoice-template-details/cost-type.ts | 2 +- .../invoice-template-line-cost-fixed.ts | 2 - .../invoice-template-line-cost-range.ts | 4 +- .../invoice-template-line-cost-unlim.ts | 2 +- .../invoice-template-multi-line.ts | 2 - .../invoice-template-single-line.ts | 2 - .../invoice-template-details/template-type.ts | 2 +- src/app/backend/model/invoice-template.ts | 2 +- src/app/backend/model/logic-error.ts | 2 +- src/app/backend/model/payer/payer-type.ts | 2 +- .../model/payer/payment-resource-payer.ts | 2 - .../backend/model/payment-flow/flow-type.ts | 2 +- .../payment-flow/hold-expiration-type.ts | 2 +- .../model/payment-flow/payment-flow-hold.ts | 4 +- .../payment-flow/payment-flow-instant.ts | 5 +- src/app/backend/model/payment-method.ts | 2 +- src/app/backend/model/payment-params.ts | 2 +- src/app/backend/model/payment-status.ts | 2 +- src/app/backend/model/payment-system.ts | 2 +- src/app/backend/model/payment-terminal.ts | 3 +- .../payment-tool-details-type.ts | 2 +- .../model/payment-tool/payment-tool-type.ts | 2 +- src/app/backend/model/payment.ts | 7 +- src/app/backend/shorten-url.ts | 4 +- src/app/components/app/app.tsx | 10 +- src/app/components/app/global-style.tsx | 1 + src/app/components/app/initial-context.ts | 1 + src/app/components/app/layout-loader.tsx | 4 +- .../app/modal-container/modal-container.tsx | 43 +- .../app/modal-container/modal/footer.tsx | 2 +- .../app/modal-container/modal/form-block.tsx | 1 + .../form-container/card-form/card-form.tsx | 39 +- .../fields/card-holder/card-holder.tsx | 26 +- .../fields/card-holder/format-card-holder.ts | 3 +- .../fields/card-number/card-number.tsx | 30 +- .../fields/card-number/format-card-number.ts | 3 +- .../fields/expire-date/expire-date.tsx | 26 +- .../fields/expire-date/format-expiry.ts | 3 +- .../validate-expire-date/card-expiry-val.ts | 4 +- .../fields/secure-code/format-cvc.ts | 1 + .../fields/secure-code/secure-code.tsx | 26 +- .../common-fields/amount/amount.tsx | 26 +- .../common-fields/amount/format-amount.ts | 3 +- .../common-fields/amount/get-placeholder.ts | 6 +- .../common-fields/amount/validate-amount.ts | 6 +- .../common-fields/email/email.tsx | 20 +- .../common-fields/phone/phone.tsx | 19 +- .../fields-config/to-fields-config.ts | 7 +- .../modal/form-container/form-container.tsx | 36 +- .../modal/form-container/form-group.tsx | 5 +- .../form-loader/form-loader.tsx | 5 +- .../get-available-terminal-payment-method.ts | 4 +- .../modal/form-container/header/header.tsx | 11 +- .../no-available-payment-method-form.tsx | 4 +- .../form-container/pay-button/pay-button.tsx | 7 +- .../payment-methods/methods/bank-card.tsx | 7 +- .../payment-methods/methods/methods-list.tsx | 4 +- .../payment-methods/methods/methods.tsx | 15 +- .../content/category-content.tsx | 7 +- .../content/content.tsx | 15 +- .../content/metadata-content.tsx | 10 +- .../payment-terminal-method-item.tsx | 19 +- .../payment-terminal-method-items.tsx | 3 +- .../payment-methods/methods/wallets.tsx | 7 +- .../other-payment-methods-link.tsx | 2 +- .../payment-methods/payment-methods.tsx | 11 +- .../format-metadata-value.ts | 2 +- .../payment-terminal-form.tsx | 67 +- .../use-default-form-values.ts | 15 +- .../page-navigation.tsx | 2 +- .../payment-terminal-selector-form.tsx | 11 +- .../service-provider-pane.tsx | 8 +- .../service-providers-grid.tsx | 20 +- .../use-grid-pages.ts | 33 +- .../qr-code-interaction-form.tsx | 25 +- .../qr-code-interaction-form/qr-code.tsx | 6 +- .../redirect-form/redirect-form.tsx | 1 - .../result-form/action-block.tsx | 11 +- .../make-content/get-failed-description.tsx | 2 +- .../make-content/make-content-error.ts | 5 +- .../make-content/make-content-invoice.ts | 3 +- .../make-content/make-from-invoice-change.tsx | 13 +- .../make-content/make-from-payment-change.tsx | 21 +- .../make-from-payment-started.tsx | 3 +- .../make-content/result-form-content.ts | 2 +- .../result-form/result-form.tsx | 13 +- .../result-icons/error-icon/error-icon.tsx | 3 +- .../result-form/result-icons/result-icon.tsx | 5 +- .../success-icon/success-icon.tsx | 3 +- .../warning-icon/warning-icon.tsx | 7 +- .../form-container/wallet-form/sign-up.tsx | 1 + .../wallet-form/wallet-form.tsx | 35 +- .../wallet-provider-payment-method-item.tsx | 12 +- .../wallet-providers/wallet-providers.tsx | 8 +- .../app/modal-container/modal/info/info.tsx | 1 - .../app/modal-container/modal/modal.tsx | 8 +- .../payable-invoice-context.ts | 1 + .../modal-container/use-interaction-model.ts | 2 +- .../user-interaction-modal.tsx | 7 +- src/app/components/app/modal-error.tsx | 1 + src/app/components/app/overlay.tsx | 4 +- src/app/components/ui/card-type-icon.tsx | 6 +- .../ui/chevron-button/chevron-button.tsx | 2 +- .../copy-to-clipboard-button.tsx | 12 +- src/app/components/ui/input/input.tsx | 6 +- src/app/components/ui/list/item.tsx | 13 +- src/app/components/ui/list/list.tsx | 3 +- src/app/components/ui/loader/loader.tsx | 10 +- src/app/components/ui/marks/marks.tsx | 5 +- .../formatters/format-numbers-only.ts | 21 +- .../get-metadata-field-formatter.ts | 1 + .../metadata-field/metadata-field.tsx | 63 +- .../metadata/metadata-logo/metadata-logo.tsx | 6 +- .../metadata-select/metadata-select.tsx | 13 +- .../metadata-title/metadata-title.tsx | 8 +- .../ui/metadata/utils/obscure-password.ts | 2 +- .../payment-method-icon.tsx | 6 +- src/app/components/ui/select/select.tsx | 2 + .../config/config-resolver/resolve-boolean.ts | 1 + .../resolve-init-config.spec.ts | 8 +- .../config-resolver/resolve-init-config.ts | 24 +- .../config-resolver/resolve-integer.spec.ts | 3 +- .../config/config-resolver/resolve-integer.ts | 3 +- .../resolve-integration-type.spec.ts | 10 +- .../resolve-integration-type.ts | 16 +- .../config-resolver/resolve-object.spec.ts | 3 +- .../config/config-resolver/resolve-object.ts | 1 + .../config-resolver/resolve-string.spec.ts | 3 +- .../config/config-resolver/resolve-string.ts | 1 + .../__mocks__/@fingerprintjs/fingerprintjs.ts | 10 +- .../create-invoice-with-template.ts | 12 +- .../create-payment/create-payment.spec.ts | 61 +- .../hooks/create-payment/create-payment.ts | 13 +- .../create-payment/payer/create-payer.ts | 7 +- .../payer/create-payment-resource.ts | 6 +- .../payer/create-session-info.spec.ts | 89 +- .../payer/create-session-info.ts | 13 +- .../payer/to-contact-info.spec.ts | 47 +- .../create-payment/payer/to-contact-info.ts | 12 +- .../create-payment/payer/to-payment-tool.ts | 7 +- .../payer/to-self-redirect-url.ts | 4 +- .../hooks/create-payment/to-payment-flow.ts | 6 +- src/app/hooks/create-payment/types/index.ts | 1 + .../get-amount-from-multi-line.spec.ts | 16 +- .../amount-info/get-amount-from-multi-line.ts | 3 +- .../get-amount-from-single-line.spec.ts | 24 +- .../get-amount-from-single-line.ts | 13 +- .../amount-info/get-amount-info.spec.ts | 10 +- .../init-app/amount-info/get-amount-info.ts | 3 +- .../resolve-invoice-template.spec.ts | 15 +- .../amount-info/resolve-invoice-template.ts | 5 +- .../amount-info/resolve-invoice.spec.ts | 4 +- .../init-app/amount-info/resolve-invoice.ts | 3 +- src/app/hooks/init-app/fetch-model.ts | 8 +- .../hooks/init-app/get-service-providers.ts | 8 +- src/app/hooks/init-app/init-app.ts | 9 +- .../bank-card-to-methods.ts | 5 +- .../filter-by-payment-method-providers.ts | 11 +- .../get-digital-wallet-payment-methods.ts | 17 +- .../get-terminals-payment-methods.ts | 101 +- .../init-available-payment-methods.ts | 3 +- .../set-priority.ts | 6 +- .../terminal-digital-wallet-reducer.ts | 9 +- .../to-available-payment-methods.ts | 15 +- .../types/digital-wallet-payment-method.ts | 1 + ...nown-digital-wallet-provider-categories.ts | 2 +- .../types/known-provider-categories.ts | 2 +- .../types/payment-method-name.ts | 2 +- .../types/payment-terminal-payment-method.ts | 1 + src/app/hooks/init-app/types.ts | 3 +- .../poll-invoice-events.spec.ts | 71 +- .../invoice-events/poll-invoice-events.ts | 8 +- src/app/hooks/modal/provide-interaction.ts | 19 +- src/app/hooks/modal/to-initial-form.ts | 7 +- src/app/hooks/modal/to-initial-state.ts | 5 +- .../modal/types/form-info/card-form-info.ts | 2 - .../hooks/modal/types/form-info/form-info.ts | 4 +- .../modal/types/form-info/form-view-info.ts | 2 +- .../modal/types/form-info/payment-status.ts | 2 +- .../form-info/payment-terminal-form-info.ts | 5 +- .../payment-terminal-selector-form-info.ts | 6 +- .../qr-code-interaction-form-info.ts | 6 +- .../types/form-info/redirect-form-info.ts | 1 + .../modal/types/form-info/result-form-info.ts | 3 +- .../modal/types/form-info/wallet-form-info.ts | 2 +- src/app/hooks/modal/types/modal-forms.ts | 36 +- .../hooks/modal/types/modal-interaction.ts | 5 +- src/app/hooks/modal/types/modal-state.ts | 2 +- src/app/hooks/use-create-payment.ts | 18 +- src/app/hooks/use-init-app.test.ts | 166 +- src/app/hooks/use-init-app.ts | 9 +- src/app/hooks/use-invoice-events.ts | 35 +- src/app/hooks/use-modal.ts | 68 +- src/app/hooks/use-theme.test.ts | 27 +- src/app/hooks/use-theme.ts | 3 +- src/app/index.tsx | 35 +- src/app/initialize.ts | 27 +- src/app/polyfills.ts | 8 - src/app/themes/index.ts | 2 +- src/app/themes/plantation.ts | 27 +- src/app/themes/rhino.ts | 27 +- src/app/themes/theme-name.ts | 2 +- src/app/themes/theme.ts | 1 + src/app/utils/amount/format-amount.ts | 7 +- src/app/utils/country-data/countries.ts | 78 +- src/app/utils/device.ts | 4 +- src/app/utils/find-previous.ts | 1 + src/app/utils/get-url-params.spec.ts | 2 +- src/app/utils/get-url-params.ts | 4 +- src/app/utils/group-by.ts | 2 +- .../utils/interaction-form/prepare-form.ts | 5 +- .../interaction-form/to-get-form-inputs.ts | 1 + .../interaction-form/to-post-form-inputs.ts | 1 + .../utils/interaction-form/uri-template.ts | 3 +- src/app/utils/is-payment-result-success.ts | 4 +- src/app/utils/partial-right.ts | 5 +- src/app/utils/phone/format-phone-number.ts | 2 +- src/app/utils/phone/get-phone-country-code.ts | 4 +- src/appConfig.json | 23 +- src/communicator/communicator-events.ts | 2 +- src/communicator/constants.ts | 2 +- src/communicator/initialize.ts | 6 +- src/communicator/listen.ts | 4 +- src/communicator/real-transport.ts | 6 +- src/environment.ts | 2 +- src/get-origin.ts | 2 +- src/initializer/dom-ready.ts | 3 +- src/initializer/html-integration.ts | 6 +- src/initializer/iframe-container.ts | 6 +- src/initializer/iframe-initializer.ts | 10 +- src/initializer/index.ts | 2 +- src/initializer/init-button/init-button.css | 6 +- src/initializer/initializer.ts | 2 +- src/initializer/popup-initializer.ts | 7 +- src/serialize-url-params.ts | 2 +- tsconfig.json | 30 +- tslint.json | 25 - types/kjua.d.ts | 2 +- vite.config.app.ts | 32 +- vite.config.checkout.ts | 10 +- vite.config.preview.ts | 2 +- 278 files changed, 4882 insertions(+), 5047 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 src/app/polyfills.ts delete mode 100644 tslint.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..627e4ba6 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,55 @@ +module.exports = { + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:@typescript-eslint/recommended', + 'prettier', + ], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint', 'import', 'react'], + root: true, + rules: { + 'import/order': [ + 'error', + { + alphabetize: { + caseInsensitive: true, + order: 'asc', + }, + groups: [['builtin', 'external'], 'internal', ['parent', 'sibling', 'index'], 'object'], + 'newlines-between': 'always', + pathGroups: [ + { + group: 'internal', + pattern: 'checkout/**', + }, + ], + pathGroupsExcludedImportTypes: ['builtin'], + }, + ], + 'react/jsx-filename-extension': ['error', { extensions: ['.tsx', '.ts'] }], + 'react/jsx-max-depth': ['error', { max: 3 }], + 'react/jsx-sort-props': [ + 'error', + { + callbacksLast: true, + ignoreCase: false, + locale: 'auto', + multiline: 'last', + noSortAlphabetically: false, + reservedFirst: true, + shorthandFirst: true, + }, + ], + 'react/require-default-props': [0], + + '@typescript-eslint/no-explicit-any': 'off', + 'no-case-declarations': 'off', + }, + settings: { + react: { + version: 'detect', + }, + }, +}; diff --git a/.github/workflows/basic-linters.yml b/.github/workflows/basic-linters.yml index 6114f14f..eb33b788 100644 --- a/.github/workflows/basic-linters.yml +++ b/.github/workflows/basic-linters.yml @@ -1,10 +1,10 @@ name: Vality basic linters on: - pull_request: - branches: - - "*" + pull_request: + branches: + - '*' jobs: - lint: - uses: valitydev/base-workflows/.github/workflows/basic-linters.yml@v1 + lint: + uses: valitydev/base-workflows/.github/workflows/basic-linters.yml@v1 diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 8eaf5295..6f0e1195 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -15,8 +15,8 @@ jobs: with: path: ./* key: ${{ github.sha }} - check: - name: Check + lint-format-check: + name: Lint and prettier check runs-on: ubuntu-latest needs: [init] steps: @@ -26,14 +26,22 @@ jobs: with: path: ./* key: ${{ github.sha }} - - name: Init NodeJS - uses: actions/setup-node@v3 + - name: Lint + run: npm run lint + - name: Prettier + run: npm run prettier + test: + name: Test + runs-on: ubuntu-latest + needs: [init] + steps: + - name: Cache + uses: actions/cache@v3 + id: cache with: - node-version: '16.13.2' - cache: 'npm' - - name: Check - run: npm run check - - name: Run tests + path: ./* + key: ${{ github.sha }} + - name: Test run: npm run test build: name: Build @@ -46,10 +54,5 @@ jobs: with: path: ./* key: ${{ github.sha }} - - name: Init NodeJS - uses: actions/setup-node@v3 - with: - node-version: '16.13.2' - cache: 'npm' - name: Build run: npm run build diff --git a/.prettierignore b/.prettierignore index 3060cac7..902e9aeb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,38 +1,7 @@ -# Exclude everything by default -/**/* - -# Include all folders -!/**/*/ - -# Includes -!*.js -!*.jsx - -!*.ts -!*.tsx - -!*.css -!*.scss - -!*.html -!*.md -!*.svg - -!*.json -!*.prettierrc -!*.babelrc - -# Excludes package-lock.json package.json node_modules dist -# VS Code -.vscode - -# IDEA -.idea - # Crowdin formats json in his own way src/locale/*.json diff --git a/.prettierrc b/.prettierrc index 74acb503..06533542 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,8 +2,6 @@ "printWidth": 120, "tabWidth": 4, "singleQuote": true, - "jsxBracketSameLine": true, - "arrowParens": "always", "overrides": [ { "files": "*.svg", diff --git a/checkout.html b/checkout.html index 24753227..c622675f 100644 --- a/checkout.html +++ b/checkout.html @@ -1,4 +1,4 @@ - + diff --git a/crowdin.yml b/crowdin.yml index 33bde480..997b96a6 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,3 @@ files: - - source: /src/locale/en.json - translation: /src/locale/%two_letters_code%.json + - source: /src/locale/en.json + translation: /src/locale/%two_letters_code%.json diff --git a/jest.config.js b/jest.config.js index 0eb830aa..13ce4926 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,6 +3,6 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'jest-environment-jsdom', moduleNameMapper: { - '^checkout/(.*)': '/src/app/$1' - } + '^checkout/(.*)': '/src/app/$1', + }, }; diff --git a/package-lock.json b/package-lock.json index d80d8e52..efddc115 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,23 +36,33 @@ "@types/react": "18.2.14", "@types/react-dom": "18.2.6", "@types/react-test-renderer": "18.0.0", + "@typescript-eslint/eslint-plugin": "6.4.0", "@vitejs/plugin-react": "4.0.3", + "eslint": "8.47.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.28.0", + "eslint-plugin-react": "7.33.1", "jest": "29.5.0", "jest-environment-jsdom": "29.5.0", - "prettier": "~1.19.1", + "prettier": "3.0.1", "react-test-renderer": "18.2.0", "ts-jest": "29.1.0", - "tslint": "~5.11.0", - "tslint-config-prettier": "~1.18.0", - "tslint-immutable": "~4.5.1", - "tslint-react": "~3.6.0", - "typescript": "4.5.4", + "typescript": "5.1.6", "vite": "4.4.6", "vite-plugin-static-copy": "0.17.0", "vite-plugin-svgr": "3.2.0", "vite-tsconfig-paths": "4.2.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", @@ -307,22 +317,6 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@babel/core/node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -334,11 +328,6 @@ "node": ">=6" } }, - "node_modules/@babel/core/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==" - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -489,27 +478,6 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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==" - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", @@ -2173,27 +2141,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/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==" - }, "node_modules/@babel/types": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", @@ -2598,6 +2545,107 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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/@eslint/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@fingerprintjs/fingerprintjs": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs/-/fingerprintjs-3.4.2.tgz", @@ -2611,6 +2659,39 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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", @@ -2662,79 +2743,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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/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/@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": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", @@ -2782,30 +2790,6 @@ } } }, - "node_modules/@jest/core/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/@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/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -2818,34 +2802,6 @@ "node": ">=8" } }, - "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/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2858,15 +2814,6 @@ "node": ">=8" } }, - "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/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2889,39 +2836,6 @@ "node": ">=8.6" } }, - "node_modules/@jest/core/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/@jest/core/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/@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/core/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3049,100 +2963,6 @@ } } }, - "node_modules/@jest/reporters/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/@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/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/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/@jest/reporters/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/@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/schemas": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", @@ -3199,15 +3019,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer/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/@jest/transform": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", @@ -3234,21 +3045,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -3261,34 +3057,6 @@ "node": ">=8" } }, - "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/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3301,15 +3069,6 @@ "node": ">=8" } }, - "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/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3332,27 +3091,6 @@ "node": ">=8.6" } }, - "node_modules/@jest/transform/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/@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/transform/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3395,70 +3133,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/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", @@ -3989,67 +3663,6 @@ "node": ">=14" } }, - "node_modules/@testing-library/dom/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/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/dom/node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -4082,18 +3695,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/react": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", @@ -4244,6 +3845,18 @@ "parse5": "^7.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/node": { "version": "16.11.25", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz", @@ -4296,6 +3909,12 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -4328,6 +3947,295 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", + "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/type-utils": "6.4.0", + "@typescript-eslint/utils": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/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/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/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/@typescript-eslint/parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", + "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", + "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/utils": "6.4.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/typescript-estree": "6.4.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/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/@typescript-eslint/visitor-keys": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", + "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@vitejs/plugin-react": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", @@ -4352,6 +4260,18 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", @@ -4362,18 +4282,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-globals/node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -4383,6 +4291,15 @@ "node": ">=0.4.0" } }, + "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/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -4395,29 +4312,22 @@ "node": ">= 6.0.0" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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": { - "ms": "2.1.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/agent-base/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/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4434,21 +4344,39 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "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": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/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/argparse": { @@ -4498,12 +4426,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aria-query/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -4517,6 +4439,122 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4535,17 +4573,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, "node_modules/babel-jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", @@ -4567,79 +4594,6 @@ "@babel/core": "^7.8.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/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/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/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-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -4835,15 +4789,6 @@ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -4911,19 +4856,19 @@ } }, "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -5009,7 +4954,9 @@ "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 + "dev": true, + "optional": true, + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -5083,6 +5030,20 @@ "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz", "integrity": "sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA==" }, + "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/crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -5157,6 +5118,22 @@ "node": ">=12" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -5218,15 +5195,6 @@ "node": ">=8" } }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -5236,6 +5204,30 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -5280,6 +5272,59 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -5300,11 +5345,45 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/esbuild": { "version": "0.18.16", @@ -5381,15 +5460,6 @@ "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/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5400,6 +5470,458 @@ "node": ">=0.10.0" } }, + "node_modules/eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.12.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/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/eslint-plugin-react": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", + "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.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/eslint-plugin-react/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/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "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/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/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/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/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -5413,6 +5935,39 @@ "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/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/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/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -5452,6 +6007,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.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-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -5556,6 +6117,18 @@ "bser": "2.1.1" } }, + "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/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5569,15 +6142,25 @@ "node": ">=8" } }, - "node_modules/find-up/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==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -5667,6 +6250,24 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -5729,6 +6330,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5768,6 +6385,41 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -5792,6 +6444,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5803,18 +6461,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -5923,29 +6569,6 @@ "node": ">= 6" } }, - "node_modules/http-proxy-agent/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/http-proxy-agent/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/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -5959,29 +6582,6 @@ "node": ">= 6" } }, - "node_modules/https-proxy-agent/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/https-proxy-agent/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/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5991,6 +6591,15 @@ "node": ">=10.17.0" } }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -6128,18 +6737,21 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -6201,6 +6813,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -6216,6 +6840,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "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", @@ -6317,6 +6950,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", @@ -6330,10 +6975,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/ismobilejs": { @@ -6389,15 +7040,6 @@ "node": ">=8" } }, - "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/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6422,18 +7064,6 @@ "semver": "bin/semver.js" } }, - "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-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -6448,29 +7078,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/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/istanbul-lib-source-maps/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/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6532,20 +7139,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/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/jest-changed-files/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6593,51 +7186,6 @@ "node": ">=8" } }, - "node_modules/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-circus": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", @@ -6669,79 +7217,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "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-circus/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-circus/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-circus/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-circus/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/jest-circus/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-cli": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", @@ -6776,46 +7251,6 @@ } } }, - "node_modules/jest-cli/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/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/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -6830,27 +7265,6 @@ "node": ">=12" } }, - "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/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/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -6903,30 +7317,6 @@ "node": ">=8" } }, - "node_modules/jest-cli/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/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-cli/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -7008,21 +7398,6 @@ } } }, - "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/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -7035,34 +7410,6 @@ "node": ">=8" } }, - "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/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7075,15 +7422,6 @@ "node": ">=8" } }, - "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/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7106,27 +7444,6 @@ "node": ">=8.6" } }, - "node_modules/jest-config/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/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-config/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7154,70 +7471,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-docblock": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", @@ -7246,70 +7499,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", @@ -7510,70 +7699,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", @@ -7594,21 +7719,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-message-util/node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -7621,34 +7731,6 @@ "node": ">=8" } }, - "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/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7661,15 +7743,6 @@ "node": ">=8" } }, - "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/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7692,27 +7765,6 @@ "node": ">=8.6" } }, - "node_modules/jest-message-util/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/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-message-util/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7798,79 +7850,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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/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/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", @@ -7903,70 +7882,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", @@ -8000,79 +7915,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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/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/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-snapshot": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", @@ -8107,58 +7949,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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", @@ -8186,18 +7976,6 @@ "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", @@ -8221,70 +7999,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", @@ -8302,21 +8016,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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", @@ -8329,55 +8028,6 @@ "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/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", @@ -8397,70 +8047,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/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": "29.5.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", @@ -8615,18 +8201,6 @@ } } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/jsdom/node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -8662,6 +8236,30 @@ "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": "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/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -8683,6 +8281,21 @@ "node": ">= 10.0.0" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/kjua": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/kjua/-/kjua-0.9.0.tgz", @@ -8776,6 +8389,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "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/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8905,6 +8524,20 @@ "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/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -9005,6 +8638,79 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9150,6 +8856,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "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", @@ -9158,6 +8873,15 @@ "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", @@ -9213,15 +8937,18 @@ } }, "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", + "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { @@ -9525,11 +9252,11 @@ "dev": true }, "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9559,6 +9286,21 @@ "node": ">=0.10.0" } }, + "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/rollup": { "version": "3.26.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", @@ -9612,6 +9354,38 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9651,6 +9425,27 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, + "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/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -9677,6 +9472,15 @@ "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/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -9756,27 +9560,6 @@ "node": ">=10" } }, - "node_modules/string-length/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/string-length/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/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -9791,15 +9574,6 @@ "node": ">=8" } }, - "node_modules/string-width/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/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -9815,7 +9589,71 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -9827,18 +9665,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -9963,12 +9789,24 @@ "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "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-color/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": ">=0.8.0" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -10014,20 +9852,6 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10065,6 +9889,12 @@ "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/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -10098,6 +9928,18 @@ "node": ">=12" } }, + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.0", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", @@ -10215,121 +10057,32 @@ } } }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" - } - }, - "node_modules/tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true, - "bin": { - "tslint-config-prettier-check": "bin/check.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/tslint-immutable": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/tslint-immutable/-/tslint-immutable-4.5.4.tgz", - "integrity": "sha512-3veFl/wOtAC0pRL8gbAAJiGDgAY40w8Vj3lYg1Cdd2phUhlh/XHsUz1XkludmoydaejZBjxg6+KLfxXwC38X1A==", - "dev": true - }, - "node_modules/tslint-react": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-3.6.0.tgz", - "integrity": "sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==", - "dev": true, - "dependencies": { - "tsutils": "^2.13.1" - }, - "peerDependencies": { - "tslint": "^5.1.0", - "typescript": ">=2.1.0 || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" - } - }, - "node_modules/tslint/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/tslint/node_modules/chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/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/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -10363,17 +10116,97 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -10450,6 +10283,15 @@ "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/uri-template": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/uri-template/-/uri-template-1.0.3.tgz", @@ -10735,29 +10577,6 @@ } } }, - "node_modules/vite-tsconfig-paths/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/vite-tsconfig-paths/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/vite/node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -10876,6 +10695,21 @@ "node": ">=12" } }, + "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-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -10908,17 +10742,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10953,54 +10786,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/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/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/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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11040,6 +10825,12 @@ } }, "dependencies": { + "@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 + }, "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -11217,24 +11008,11 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -11345,21 +11123,6 @@ "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "@babel/helper-environment-visitor": { @@ -12455,21 +12218,6 @@ "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "@babel/types": { @@ -12674,6 +12422,76 @@ "dev": true, "optional": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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 + } + } + }, + "@eslint/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "dev": true + }, "@fingerprintjs/fingerprintjs": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs/-/fingerprintjs-3.4.2.tgz", @@ -12689,6 +12507,29 @@ } } }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@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 + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -12728,57 +12569,6 @@ "jest-message-util": "^29.5.0", "jest-util": "^29.5.0", "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jest/core": { @@ -12817,21 +12607,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "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 - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -12841,25 +12616,6 @@ "fill-range": "^7.0.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -12869,12 +12625,6 @@ "to-regex-range": "^5.0.1" } }, - "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 - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -12891,30 +12641,6 @@ "picomatch": "^2.3.1" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13013,72 +12739,6 @@ "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "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 - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jest/schemas": { @@ -13123,14 +12783,6 @@ "graceful-fs": "^4.2.9", "jest-haste-map": "^29.5.0", "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } } }, "@jest/transform": { @@ -13156,15 +12808,6 @@ "write-file-atomic": "^4.0.2" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -13174,25 +12817,6 @@ "fill-range": "^7.0.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -13202,12 +12826,6 @@ "to-regex-range": "^5.0.1" } }, - "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 - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13224,21 +12842,6 @@ "picomatch": "^2.3.1" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13272,51 +12875,6 @@ "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jridgewell/gen-mapping": { @@ -13680,46 +13238,6 @@ "pretty-format": "^27.0.2" }, "dependencies": { - "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 - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13744,15 +13262,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -13895,6 +13404,18 @@ "parse5": "^7.0.0" } }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/node": { "version": "16.11.25", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz", @@ -13947,6 +13468,12 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", "dev": true }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -13979,6 +13506,185 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", + "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/type-utils": "6.4.0", + "@typescript-eslint/utils": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", + "dev": true, + "peer": true, + "requires": { + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", + "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", + "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "6.4.0", + "@typescript-eslint/utils": "6.4.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.4.0", + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/typescript-estree": "6.4.0", + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", + "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.4.0", + "eslint-visitor-keys": "^3.4.1" + } + }, "@vitejs/plugin-react": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", @@ -13997,6 +13703,12 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, "acorn-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", @@ -14007,12 +13719,6 @@ "acorn-walk": "^8.0.2" }, "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -14021,6 +13727,13 @@ } } }, + "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, + "requires": {} + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -14028,23 +13741,18 @@ "dev": true, "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ansi-escapes": { @@ -14057,16 +13765,30 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } }, "argparse": { "version": "1.0.10", @@ -14111,12 +13833,6 @@ "which-collection": "^1.0.1", "which-typed-array": "^1.1.9" } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true } } }, @@ -14130,6 +13846,89 @@ "is-array-buffer": "^3.0.1" } }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -14142,17 +13941,6 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, "babel-jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", @@ -14166,57 +13954,6 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "babel-plugin-istanbul": { @@ -14364,12 +14101,6 @@ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -14411,16 +14142,13 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "char-regex": { @@ -14484,7 +14212,9 @@ "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 + "dev": true, + "optional": true, + "peer": true }, "concat-map": { "version": "0.0.1", @@ -14544,6 +14274,17 @@ "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz", "integrity": "sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA==" }, + "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, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -14610,6 +14351,14 @@ "whatwg-url": "^11.0.0" } }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, "decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -14656,18 +14405,30 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -14703,6 +14464,53 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + } + }, "es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -14718,14 +14526,37 @@ "is-string": "^1.0.7", "isarray": "^2.0.5", "stop-iteration-iterator": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "esbuild": { @@ -14781,12 +14612,6 @@ "source-map": "~0.6.1" }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14796,12 +14621,374 @@ } } }, + "eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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 + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@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" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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 + }, + "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, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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 + } + } + }, + "eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.12.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", + "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, "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 }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "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, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -14832,6 +15019,12 @@ "jest-util": "^29.5.0" } }, + "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 + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -14920,6 +15113,15 @@ "bser": "2.1.1" } }, + "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, + "requires": { + "flat-cache": "^3.0.4" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -14928,16 +15130,24 @@ "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" - }, - "dependencies": { - "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 - } } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -15008,6 +15218,18 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -15049,6 +15271,16 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -15076,6 +15308,29 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -15097,6 +15352,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -15105,15 +15366,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -15187,23 +15439,6 @@ "@tootallnate/once": "2", "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } } }, "https-proxy-agent": { @@ -15214,23 +15449,6 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } } }, "human-signals": { @@ -15239,6 +15457,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -15345,15 +15569,15 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "requires": { "has": "^1.0.3" } @@ -15394,6 +15618,12 @@ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -15403,6 +15633,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "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", @@ -15471,6 +15707,15 @@ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", @@ -15481,10 +15726,16 @@ "get-intrinsic": "^1.1.1" } }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "ismobilejs": { @@ -15530,12 +15781,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "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 - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -15550,15 +15795,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -15573,21 +15809,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15664,17 +15885,6 @@ "p-limit": "^3.1.0" }, "dependencies": { - "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, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -15706,36 +15916,6 @@ "requires": { "path-key": "^3.0.0" } - }, - "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 - }, - "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, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "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 - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -15765,57 +15945,6 @@ "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-cli": { @@ -15838,31 +15967,6 @@ "yargs": "^17.3.1" }, "dependencies": { - "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 - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -15874,21 +15978,6 @@ "wrap-ansi": "^7.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -15923,24 +16012,6 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -16000,15 +16071,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -16018,25 +16080,6 @@ "fill-range": "^7.0.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -16046,12 +16089,6 @@ "to-regex-range": "^5.0.1" } }, - "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 - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -16068,21 +16105,6 @@ "picomatch": "^2.3.1" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16104,51 +16126,6 @@ "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-docblock": { @@ -16171,51 +16148,6 @@ "jest-get-type": "^29.4.3", "jest-util": "^29.5.0", "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-environment-jsdom": { @@ -16362,51 +16294,6 @@ "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-message-util": { @@ -16426,15 +16313,6 @@ "stack-utils": "^2.0.3" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -16444,25 +16322,6 @@ "fill-range": "^7.0.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -16472,12 +16331,6 @@ "to-regex-range": "^5.0.1" } }, - "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 - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -16494,21 +16347,6 @@ "picomatch": "^2.3.1" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16559,57 +16397,6 @@ "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-resolve-dependencies": { @@ -16649,51 +16436,6 @@ "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-runtime": { @@ -16724,57 +16466,6 @@ "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-snapshot": { @@ -16808,40 +16499,6 @@ "semver": "^7.3.5" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -16860,15 +16517,6 @@ "lru-cache": "^6.0.0" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16889,51 +16537,6 @@ "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-validate": { @@ -16950,54 +16553,11 @@ "pretty-format": "^29.5.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -17015,51 +16575,6 @@ "emittery": "^0.13.1", "jest-util": "^29.5.0", "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-worker": { @@ -17140,12 +16655,6 @@ "xml-name-validator": "^4.0.0" }, "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, "ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -17166,6 +16675,27 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "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 + }, + "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 + }, + "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, + "requires": { + "minimist": "^1.2.0" + } + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -17184,6 +16714,18 @@ } } }, + "jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, "kjua": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/kjua/-/kjua-0.9.0.tgz", @@ -17265,6 +16807,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "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 + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -17369,6 +16917,17 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -17436,6 +16995,61 @@ "object-keys": "^1.1.1" } }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -17540,11 +17154,23 @@ } } }, + "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 + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "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 + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -17585,9 +17211,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", + "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", "dev": true }, "pretty-format": { @@ -17812,11 +17438,11 @@ "dev": true }, "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "requires": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -17833,6 +17459,15 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "rollup": { "version": "3.26.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", @@ -17860,6 +17495,29 @@ "queue-microtask": "^1.2.2" } }, + "safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -17893,6 +17551,21 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -17916,6 +17589,12 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -17979,23 +17658,6 @@ "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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 - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "string-width": { @@ -18009,12 +17671,6 @@ "strip-ansi": "^6.0.1" }, "dependencies": { - "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 - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -18026,25 +17682,65 @@ "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 - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -18127,10 +17823,21 @@ "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } + } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", @@ -18163,14 +17870,6 @@ "source-map-support": "~0.5.20" }, "dependencies": { - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "optional": true, - "peer": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -18204,6 +17903,12 @@ "minimatch": "^3.0.4" } }, + "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 + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -18231,6 +17936,13 @@ "punycode": "^2.1.1" } }, + "ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "dev": true, + "requires": {} + }, "ts-jest": { "version": "29.1.0", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", @@ -18292,92 +18004,31 @@ "dev": true, "requires": {} }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "dependencies": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true - }, - "tslint-immutable": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/tslint-immutable/-/tslint-immutable-4.5.4.tgz", - "integrity": "sha512-3veFl/wOtAC0pRL8gbAAJiGDgAY40w8Vj3lYg1Cdd2phUhlh/XHsUz1XkludmoydaejZBjxg6+KLfxXwC38X1A==", - "dev": true - }, - "tslint-react": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-3.6.0.tgz", - "integrity": "sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==", - "dev": true, - "requires": { - "tsutils": "^2.13.1" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -18399,12 +18050,71 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "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", @@ -18444,6 +18154,15 @@ "picocolors": "^1.0.0" } }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "uri-template": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/uri-template/-/uri-template-1.0.3.tgz", @@ -18643,23 +18362,6 @@ "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } } }, "w3c-xmlserializer": { @@ -18722,6 +18424,15 @@ "webidl-conversions": "^7.0.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -18748,17 +18459,16 @@ } }, "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" } }, "word-wrap": { @@ -18776,41 +18486,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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 - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "wrappy": { diff --git a/package.json b/package.json index f3f2ea9e..8afb20e8 100644 --- a/package.json +++ b/package.json @@ -6,15 +6,13 @@ "dev": "vite --c vite.config.app.ts", "build:app": "vite build --c vite.config.app.ts", "build:checkout": "vite build --c vite.config.checkout.ts", - "build": "npm run build:checkout && npm run build:app", + "build": "tsc && npm run build:checkout && npm run build:app", "preview": "npm run build && vite --c vite.config.preview.ts", "test": "jest", "test:watch": "jest --watch", - "prettier:fix": "prettier \"**\" --write", - "prettier:check": "prettier \"**\" --list-different", - "lint:fix": "tslint \"src/**/*.@(ts|tsx)\" -e \"**/*.d.ts\"", - "check": "npm run lint:fix; npm run prettier:check", - "fix": "npm run lint:fix; npm run prettier:fix" + "prettier": "prettier * --list-different --ignore-unknown", + "prettier:fix": "prettier * --write --ignore-unknown", + "lint": "eslint -c .eslintrc.js --ext .ts,.tsx ." }, "license": "Apache-2.0", "dependencies": { @@ -45,17 +43,18 @@ "@types/react": "18.2.14", "@types/react-dom": "18.2.6", "@types/react-test-renderer": "18.0.0", + "@typescript-eslint/eslint-plugin": "6.4.0", "@vitejs/plugin-react": "4.0.3", + "eslint": "8.47.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.28.0", + "eslint-plugin-react": "7.33.1", "jest": "29.5.0", "jest-environment-jsdom": "29.5.0", - "prettier": "~1.19.1", + "prettier": "3.0.1", "react-test-renderer": "18.2.0", "ts-jest": "29.1.0", - "tslint": "~5.11.0", - "tslint-config-prettier": "~1.18.0", - "tslint-immutable": "~4.5.1", - "tslint-react": "~3.6.0", - "typescript": "4.5.4", + "typescript": "5.1.6", "vite": "4.4.6", "vite-plugin-static-copy": "0.17.0", "vite-plugin-svgr": "3.2.0", diff --git a/src/app/backend/create-invoice-with-template.ts b/src/app/backend/create-invoice-with-template.ts index 471f9464..ab2a7ffa 100644 --- a/src/app/backend/create-invoice-with-template.ts +++ b/src/app/backend/create-invoice-with-template.ts @@ -1,16 +1,17 @@ +import { InvoiceAndToken, InvoiceParamsWithTemplate } from 'checkout/backend/model'; + import { fetchCapi } from '.'; import v from './capi-version'; -import { InvoiceAndToken, InvoiceParamsWithTemplate } from 'checkout/backend/model'; export const createInvoiceWithTemplate = ( capiEndpoint: string, accessToken: string, invoiceTemplateID: string, - params: InvoiceParamsWithTemplate + params: InvoiceParamsWithTemplate, ): Promise => fetchCapi({ method: 'POST', endpoint: `${capiEndpoint}/${v}/processing/invoice-templates/${invoiceTemplateID}/invoices`, accessToken, - body: params + body: params, }); diff --git a/src/app/backend/create-payment-resource.ts b/src/app/backend/create-payment-resource.ts index 1bcd00f7..d1f84d28 100644 --- a/src/app/backend/create-payment-resource.ts +++ b/src/app/backend/create-payment-resource.ts @@ -1,4 +1,5 @@ import { ClientInfo, PaymentResource, PaymentTool } from 'checkout/backend/model'; + import v from './capi-version'; import { fetchCapi } from './fetch-capi'; @@ -6,7 +7,7 @@ export const createPaymentResource = ( capiEndpoint: string, accessToken: string, paymentTool: PaymentTool, - clientInfo: ClientInfo + clientInfo: ClientInfo, ): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/payment-resources`, @@ -14,6 +15,6 @@ export const createPaymentResource = ( method: 'POST', body: { paymentTool, - clientInfo - } + clientInfo, + }, }); diff --git a/src/app/backend/create-payment.ts b/src/app/backend/create-payment.ts index 61db746d..8bd8e3e9 100644 --- a/src/app/backend/create-payment.ts +++ b/src/app/backend/create-payment.ts @@ -1,16 +1,16 @@ -import { PaymentParams, Payment } from './model'; import v from './capi-version'; import { fetchCapi } from './fetch-capi'; +import { PaymentParams, Payment } from './model'; export const createPayment = ( capiEndpoint: string, accessToken: string, invoiceID: string, - paymentParams: PaymentParams + paymentParams: PaymentParams, ): Promise => fetchCapi({ method: 'POST', endpoint: `${capiEndpoint}/${v}/processing/invoices/${invoiceID}/payments`, accessToken, - body: paymentParams + body: paymentParams, }); diff --git a/src/app/backend/fetch-capi.spec.ts b/src/app/backend/fetch-capi.spec.ts index c0269717..a8dade0a 100644 --- a/src/app/backend/fetch-capi.spec.ts +++ b/src/app/backend/fetch-capi.spec.ts @@ -3,14 +3,14 @@ import { fetchCapi } from './fetch-capi'; describe('fetch capi', () => { test('should do GET request', async () => { const expected = { - someField: 'someValue' + someField: 'someValue', }; const mockFetch = jest.fn(); mockFetch.mockResolvedValue({ status: 200, ok: true, - json: async () => expected + json: async () => expected, }); global.fetch = mockFetch; @@ -25,22 +25,22 @@ describe('fetch capi', () => { headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json;charset=utf-8', - 'X-Request-ID': expect.any(String) + 'X-Request-ID': expect.any(String), }, - method: 'GET' + method: 'GET', }); }); test('should do POST request', async () => { const expected = { - someField: 'someValue' + someField: 'someValue', }; const mockFetch = jest.fn(); mockFetch.mockResolvedValue({ status: 200, ok: true, - json: async () => expected + json: async () => expected, }); global.fetch = mockFetch; @@ -57,9 +57,9 @@ describe('fetch capi', () => { headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json;charset=utf-8', - 'X-Request-ID': expect.any(String) + 'X-Request-ID': expect.any(String), }, - method + method, }); }); @@ -69,7 +69,7 @@ describe('fetch capi', () => { mockFetch.mockResolvedValue({ status: 500, ok: false, - statusText + statusText, }); global.fetch = mockFetch; @@ -78,14 +78,18 @@ describe('fetch capi', () => { try { await fetchCapi({ endpoint, accessToken }); } catch (error) { - expect(error).toStrictEqual({ status: 500, statusText, details: undefined }); + expect(error).toStrictEqual({ + status: 500, + statusText, + details: undefined, + }); } }); test('should retry json reject', async () => { const errorMsg = 'Read json error'; const expected = { - someField: 'someValue' + someField: 'someValue', }; const mockFetchJson = jest .fn() @@ -95,7 +99,7 @@ describe('fetch capi', () => { const mockFetch = jest.fn().mockResolvedValue({ status: 200, ok: true, - json: mockFetchJson + json: mockFetchJson, }); global.fetch = mockFetch; @@ -112,7 +116,7 @@ describe('fetch capi', () => { test('should retry failed fetch requests', async () => { const expected = { - someField: 'someValue' + someField: 'someValue', }; const mockFetch = jest @@ -122,7 +126,7 @@ describe('fetch capi', () => { .mockResolvedValueOnce({ status: 200, ok: true, - json: async () => expected + json: async () => expected, }); global.fetch = mockFetch; @@ -140,9 +144,9 @@ describe('fetch capi', () => { headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json;charset=utf-8', - 'X-Request-ID': expect.any(String) + 'X-Request-ID': expect.any(String), }, - method: 'GET' + method: 'GET', }; expect(mockFetch).toHaveBeenCalledWith(endpoint, requestInit); expect(mockFetch).toHaveBeenCalledWith(endpoint, requestInit); diff --git a/src/app/backend/fetch-capi.ts b/src/app/backend/fetch-capi.ts index 151a5402..2e942acc 100644 --- a/src/app/backend/fetch-capi.ts +++ b/src/app/backend/fetch-capi.ts @@ -1,5 +1,5 @@ -import guid from 'checkout/utils/guid'; import delay from 'checkout/utils/delay'; +import guid from 'checkout/utils/guid'; export type FetchCapiParams = { endpoint: string; @@ -25,7 +25,7 @@ const provideResponse = async (response: Response, retryDelay: number, retryLimi return Promise.reject({ status: response.status, statusText: response.statusText || undefined, - details: await getDetails(response) + details: await getDetails(response), }); } catch (ex) { if (attempt === retryLimit) { @@ -44,9 +44,9 @@ const doFetch = async (param: FetchCapiParams, retryDelay: number, retryLimit: n headers: { 'Content-Type': 'application/json;charset=utf-8', Authorization: param.accessToken ? `Bearer ${param.accessToken}` : undefined, - 'X-Request-ID': guid() + 'X-Request-ID': guid(), }, - body: param.body ? JSON.stringify(param.body) : undefined + body: param.body ? JSON.stringify(param.body) : undefined, }); } catch (ex) { if (attempt === retryLimit) { diff --git a/src/app/backend/get-app-config.ts b/src/app/backend/get-app-config.ts index 005d815d..ea415d05 100644 --- a/src/app/backend/get-app-config.ts +++ b/src/app/backend/get-app-config.ts @@ -1,5 +1,6 @@ -import { AppConfig } from './app-config'; import { getNocacheValue } from 'checkout/utils'; + +import { AppConfig } from './app-config'; import { fetchCapi } from './fetch-capi'; export const getAppConfig = (): Promise => diff --git a/src/app/backend/get-env.ts b/src/app/backend/get-env.ts index 7b182274..bb0ef665 100644 --- a/src/app/backend/get-env.ts +++ b/src/app/backend/get-env.ts @@ -1,4 +1,5 @@ import { getNocacheValue } from 'checkout/utils'; + import { fetchCapi } from './fetch-capi'; export interface Env { diff --git a/src/app/backend/get-invoice-events.ts b/src/app/backend/get-invoice-events.ts index 7199c38c..0fc63191 100644 --- a/src/app/backend/get-invoice-events.ts +++ b/src/app/backend/get-invoice-events.ts @@ -1,13 +1,14 @@ +import { InvoiceEvent } from 'checkout/backend/model'; + import { fetchCapi } from '.'; import v from './capi-version'; -import { InvoiceEvent } from 'checkout/backend/model'; export const getInvoiceEvents = ( capiEndpoint: string, accessToken: string, invoiceID: string, limit: number = 50, - eventID?: number + eventID?: number, ): Promise => { let endpoint = `${capiEndpoint}/${v}/processing/invoices/${invoiceID}/events?limit=${limit}`; endpoint = eventID ? endpoint + `&eventID=${eventID}` : endpoint; diff --git a/src/app/backend/get-invoice-payment-methods-by-template-id.ts b/src/app/backend/get-invoice-payment-methods-by-template-id.ts index 337422c3..8e7f17e9 100644 --- a/src/app/backend/get-invoice-payment-methods-by-template-id.ts +++ b/src/app/backend/get-invoice-payment-methods-by-template-id.ts @@ -4,9 +4,9 @@ import v from './capi-version'; export const getInvoicePaymentMethodsByTemplateID = ( capiEndpoint: string, accessToken: string, - invoiceTemplateID: string + invoiceTemplateID: string, ): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/invoice-templates/${invoiceTemplateID}/payment-methods`, - accessToken + accessToken, }); diff --git a/src/app/backend/get-invoice-payment-methods.ts b/src/app/backend/get-invoice-payment-methods.ts index c4add345..b353e812 100644 --- a/src/app/backend/get-invoice-payment-methods.ts +++ b/src/app/backend/get-invoice-payment-methods.ts @@ -4,9 +4,9 @@ import v from './capi-version'; export const getInvoicePaymentMethods = ( capiEndpoint: string, accessToken: string, - invoiceID: string + invoiceID: string, ): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/invoices/${invoiceID}/payment-methods`, - accessToken + accessToken, }); diff --git a/src/app/backend/get-invoice-template.ts b/src/app/backend/get-invoice-template.ts index a5e61178..2cfe6f3a 100644 --- a/src/app/backend/get-invoice-template.ts +++ b/src/app/backend/get-invoice-template.ts @@ -4,9 +4,9 @@ import v from './capi-version'; export const getInvoiceTemplateByID = ( capiEndpoint: string, accessToken: string, - invoiceTemplateID: string + invoiceTemplateID: string, ): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/invoice-templates/${invoiceTemplateID}`, - accessToken + accessToken, }); diff --git a/src/app/backend/get-invoice.ts b/src/app/backend/get-invoice.ts index 89b756a9..ffb5fae9 100644 --- a/src/app/backend/get-invoice.ts +++ b/src/app/backend/get-invoice.ts @@ -4,5 +4,5 @@ import v from './capi-version'; export const getInvoiceByID = (capiEndpoint: string, accessToken: string, invoiceID: string): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/invoices/${invoiceID}`, - accessToken + accessToken, }); diff --git a/src/app/backend/get-locale.ts b/src/app/backend/get-locale.ts index 51f2d934..01fe64fe 100644 --- a/src/app/backend/get-locale.ts +++ b/src/app/backend/get-locale.ts @@ -1,7 +1,10 @@ import { Locale } from 'checkout/locale'; -import { detectLocale } from '../../locale'; import { getNocacheValue } from 'checkout/utils'; + import { fetchCapi } from './fetch-capi'; +import { detectLocale } from '../../locale'; export const getLocale = (locale: string): Promise => - fetchCapi({ endpoint: `../v1/locale/${detectLocale(locale)}.json?nocache=${getNocacheValue()}` }); + fetchCapi({ + endpoint: `../v1/locale/${detectLocale(locale)}.json?nocache=${getNocacheValue()}`, + }); diff --git a/src/app/backend/get-service-provider-by-id.ts b/src/app/backend/get-service-provider-by-id.ts index 7ab5aa4a..1540f6c9 100644 --- a/src/app/backend/get-service-provider-by-id.ts +++ b/src/app/backend/get-service-provider-by-id.ts @@ -4,9 +4,9 @@ import v from './capi-version'; export const getServiceProviderByID = ( capiEndpoint: string, accessToken: string, - serviceProviderID: string + serviceProviderID: string, ): Promise => fetchCapi({ endpoint: `${capiEndpoint}/${v}/processing/service-providers/${serviceProviderID}`, - accessToken + accessToken, }); diff --git a/src/app/backend/model/bank-card.ts b/src/app/backend/model/bank-card.ts index 1451cbf5..077646c6 100644 --- a/src/app/backend/model/bank-card.ts +++ b/src/app/backend/model/bank-card.ts @@ -1,7 +1,6 @@ +import { PaymentMethod } from './payment-method'; import { PaymentSystem } from './payment-system'; -import { PaymentMethod, PaymentMethodName } from './payment-method'; export class BankCard extends PaymentMethod { - method: PaymentMethodName.BankCard; paymentSystems: PaymentSystem[]; } diff --git a/src/app/backend/model/digital-wallet.ts b/src/app/backend/model/digital-wallet.ts index 567fccdd..6e80a46f 100644 --- a/src/app/backend/model/digital-wallet.ts +++ b/src/app/backend/model/digital-wallet.ts @@ -1,6 +1,5 @@ -import { PaymentMethod, PaymentMethodName } from './payment-method'; +import { PaymentMethod } from './payment-method'; export class DigitalWallet extends PaymentMethod { - method: PaymentMethodName.DigitalWallet; providers: string[]; } diff --git a/src/app/backend/model/event/invoice-change-type.ts b/src/app/backend/model/event/invoice-change-type.ts index 7f97e0e4..4d83ba29 100644 --- a/src/app/backend/model/event/invoice-change-type.ts +++ b/src/app/backend/model/event/invoice-change-type.ts @@ -4,5 +4,5 @@ export enum InvoiceChangeType { PaymentInteractionRequested = 'PaymentInteractionRequested', PaymentInteractionCompleted = 'PaymentInteractionCompleted', PaymentStarted = 'PaymentStarted', - PaymentStatusChanged = 'PaymentStatusChanged' + PaymentStatusChanged = 'PaymentStatusChanged', } diff --git a/src/app/backend/model/event/invoice-created.ts b/src/app/backend/model/event/invoice-created.ts index 3686fe61..a9dda3eb 100644 --- a/src/app/backend/model/event/invoice-created.ts +++ b/src/app/backend/model/event/invoice-created.ts @@ -1,6 +1,7 @@ +import { InvoiceChangeType } from 'checkout/backend/model/event/invoice-change-type'; + import { InvoiceChange } from './invoice-change'; import { Invoice } from '../invoice'; -import { InvoiceChangeType } from 'checkout/backend/model/event/invoice-change-type'; export class InvoiceCreated extends InvoiceChange { changeType = InvoiceChangeType.InvoiceCreated; diff --git a/src/app/backend/model/event/invoice-event.ts b/src/app/backend/model/event/invoice-event.ts index a7eeb1da..4bcdc872 100644 --- a/src/app/backend/model/event/invoice-event.ts +++ b/src/app/backend/model/event/invoice-event.ts @@ -1,4 +1,5 @@ import { InvoiceChange } from 'checkout/backend/model/event/invoice-change'; + import { Event } from './event'; export class InvoiceEvent extends Event {} diff --git a/src/app/backend/model/event/invoice-status-changed.ts b/src/app/backend/model/event/invoice-status-changed.ts index 381591eb..059b8046 100644 --- a/src/app/backend/model/event/invoice-status-changed.ts +++ b/src/app/backend/model/event/invoice-status-changed.ts @@ -6,7 +6,7 @@ export enum InvoiceStatuses { cancelled = 'cancelled', fulfilled = 'fulfilled', unpaid = 'unpaid', - refunded = 'refunded' + refunded = 'refunded', } export class InvoiceStatusChanged extends InvoiceChange { diff --git a/src/app/backend/model/event/payment-started.ts b/src/app/backend/model/event/payment-started.ts index fa5a368e..954767ec 100644 --- a/src/app/backend/model/event/payment-started.ts +++ b/src/app/backend/model/event/payment-started.ts @@ -1,6 +1,6 @@ import { InvoiceChange } from './invoice-change'; -import { Payment } from '../payment'; import { InvoiceChangeType } from './invoice-change-type'; +import { Payment } from '../payment'; export class PaymentStarted extends InvoiceChange { changeType = InvoiceChangeType.PaymentStarted; diff --git a/src/app/backend/model/event/payment-status-changed.ts b/src/app/backend/model/event/payment-status-changed.ts index 5e609fc9..f102f452 100644 --- a/src/app/backend/model/event/payment-status-changed.ts +++ b/src/app/backend/model/event/payment-status-changed.ts @@ -1,6 +1,7 @@ +import { PaymentError } from 'checkout/backend'; + import { InvoiceChange } from './invoice-change'; import { InvoiceChangeType } from './invoice-change-type'; -import { PaymentError } from 'checkout/backend'; export enum PaymentStatuses { processed = 'processed', @@ -8,7 +9,7 @@ export enum PaymentStatuses { cancelled = 'cancelled', pending = 'pending', captured = 'captured', - refunded = 'refunded' + refunded = 'refunded', } export class PaymentStatusChanged extends InvoiceChange { diff --git a/src/app/backend/model/event/user-interaction/interation-type.ts b/src/app/backend/model/event/user-interaction/interation-type.ts index b2d1bc3d..f8e9ff1e 100644 --- a/src/app/backend/model/event/user-interaction/interation-type.ts +++ b/src/app/backend/model/event/user-interaction/interation-type.ts @@ -1,5 +1,5 @@ export enum InteractionType { Redirect = 'Redirect', PaymentTerminalReceipt = 'PaymentTerminalReceipt', - QrCodeDisplayRequest = 'QrCodeDisplayRequest' + QrCodeDisplayRequest = 'QrCodeDisplayRequest', } diff --git a/src/app/backend/model/event/user-interaction/redirect.ts b/src/app/backend/model/event/user-interaction/redirect.ts index edb5bfcf..22335c5b 100644 --- a/src/app/backend/model/event/user-interaction/redirect.ts +++ b/src/app/backend/model/event/user-interaction/redirect.ts @@ -1,5 +1,5 @@ -import { UserInteraction } from './user-interaction'; import { BrowserRequest } from './browser-request'; +import { UserInteraction } from './user-interaction'; export class Redirect extends UserInteraction { request: BrowserRequest; diff --git a/src/app/backend/model/event/user-interaction/request-type.ts b/src/app/backend/model/event/user-interaction/request-type.ts index 72f1086f..a33c8a04 100644 --- a/src/app/backend/model/event/user-interaction/request-type.ts +++ b/src/app/backend/model/event/user-interaction/request-type.ts @@ -1,4 +1,4 @@ export enum RequestType { BrowserGetRequest = 'BrowserGetRequest', - BrowserPostRequest = 'BrowserPostRequest' + BrowserPostRequest = 'BrowserPostRequest', } diff --git a/src/app/backend/model/invoice-status.ts b/src/app/backend/model/invoice-status.ts index 980d79b2..c68c9704 100644 --- a/src/app/backend/model/invoice-status.ts +++ b/src/app/backend/model/invoice-status.ts @@ -3,5 +3,5 @@ export enum InvoiceStatus { paid = 'paid', cancelled = 'cancelled', refunded = 'refunded', - fulfilled = 'fulfilled' + fulfilled = 'fulfilled', } diff --git a/src/app/backend/model/invoice-template-and-token.ts b/src/app/backend/model/invoice-template-and-token.ts index 146c0bad..43c45a29 100644 --- a/src/app/backend/model/invoice-template-and-token.ts +++ b/src/app/backend/model/invoice-template-and-token.ts @@ -1,5 +1,5 @@ -import { InvoiceTemplate } from './invoice-template'; import { AccessToken } from './access-token'; +import { InvoiceTemplate } from './invoice-template'; export class InvoiceTemplateAndToken { invoiceTemplate: InvoiceTemplate; diff --git a/src/app/backend/model/invoice-template-details/cost-type.ts b/src/app/backend/model/invoice-template-details/cost-type.ts index e1f6d284..494ab430 100644 --- a/src/app/backend/model/invoice-template-details/cost-type.ts +++ b/src/app/backend/model/invoice-template-details/cost-type.ts @@ -1,5 +1,5 @@ export enum CostType { InvoiceTemplateLineCostFixed = 'InvoiceTemplateLineCostFixed', InvoiceTemplateLineCostRange = 'InvoiceTemplateLineCostRange', - InvoiceTemplateLineCostUnlim = 'InvoiceTemplateLineCostUnlim' + InvoiceTemplateLineCostUnlim = 'InvoiceTemplateLineCostUnlim', } diff --git a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-fixed.ts b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-fixed.ts index ad645427..15af9843 100644 --- a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-fixed.ts +++ b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-fixed.ts @@ -1,8 +1,6 @@ import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; -import { CostType } from './cost-type'; export class InvoiceTemplateLineCostFixed extends InvoiceTemplateLineCost { - costType: CostType.InvoiceTemplateLineCostFixed; amount: number; currency: string; } diff --git a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-range.ts b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-range.ts index 63f27f7a..efd4cc40 100644 --- a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-range.ts +++ b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-range.ts @@ -1,9 +1,7 @@ -import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; import { CostAmountRange } from './cost-amount-range'; -import { CostType } from './cost-type'; +import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; export class InvoiceTemplateLineCostRange extends InvoiceTemplateLineCost { - costType: CostType.InvoiceTemplateLineCostRange; range: CostAmountRange; currency: string; } diff --git a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-unlim.ts b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-unlim.ts index 20942086..f360f69d 100644 --- a/src/app/backend/model/invoice-template-details/invoice-template-line-cost-unlim.ts +++ b/src/app/backend/model/invoice-template-details/invoice-template-line-cost-unlim.ts @@ -1,5 +1,5 @@ -import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; import { CostType } from './cost-type'; +import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; export class InvoiceTemplateLineCostUnlim extends InvoiceTemplateLineCost { constType: CostType.InvoiceTemplateLineCostUnlim; diff --git a/src/app/backend/model/invoice-template-details/invoice-template-multi-line.ts b/src/app/backend/model/invoice-template-details/invoice-template-multi-line.ts index b3183985..91a472f7 100644 --- a/src/app/backend/model/invoice-template-details/invoice-template-multi-line.ts +++ b/src/app/backend/model/invoice-template-details/invoice-template-multi-line.ts @@ -1,9 +1,7 @@ import { InvoiceTemplateDetails } from './invoice-template-details'; import { InvoiceLine } from '../invoice-cart/invoice-line'; -import { TemplateType } from './template-type'; export class InvoiceTemplateMultiLine extends InvoiceTemplateDetails { - templateType: TemplateType.InvoiceTemplateMultiLine; cart: InvoiceLine[]; currency: string; } diff --git a/src/app/backend/model/invoice-template-details/invoice-template-single-line.ts b/src/app/backend/model/invoice-template-details/invoice-template-single-line.ts index 85b3b000..3b871fb5 100644 --- a/src/app/backend/model/invoice-template-details/invoice-template-single-line.ts +++ b/src/app/backend/model/invoice-template-details/invoice-template-single-line.ts @@ -1,10 +1,8 @@ import { InvoiceTemplateDetails } from './invoice-template-details'; import { InvoiceTemplateLineCost } from './invoice-template-line-cost'; import { InvoiceLineTaxMode } from '../invoice-cart/invoice-line-tax-mode'; -import { TemplateType } from './template-type'; export class InvoiceTemplateSingleLine extends InvoiceTemplateDetails { - templateType: TemplateType.InvoiceTemplateSingleLine; product: string; price: InvoiceTemplateLineCost; taxMode?: InvoiceLineTaxMode; diff --git a/src/app/backend/model/invoice-template-details/template-type.ts b/src/app/backend/model/invoice-template-details/template-type.ts index 7fecab85..ea40853c 100644 --- a/src/app/backend/model/invoice-template-details/template-type.ts +++ b/src/app/backend/model/invoice-template-details/template-type.ts @@ -1,4 +1,4 @@ export enum TemplateType { InvoiceTemplateMultiLine = 'InvoiceTemplateMultiLine', - InvoiceTemplateSingleLine = 'InvoiceTemplateSingleLine' + InvoiceTemplateSingleLine = 'InvoiceTemplateSingleLine', } diff --git a/src/app/backend/model/invoice-template.ts b/src/app/backend/model/invoice-template.ts index 79b73318..7f555f22 100644 --- a/src/app/backend/model/invoice-template.ts +++ b/src/app/backend/model/invoice-template.ts @@ -1,5 +1,5 @@ -import { LifetimeInterval } from './invoice-template-details/lifetime-interval'; import { InvoiceTemplateDetails } from './invoice-template-details/invoice-template-details'; +import { LifetimeInterval } from './invoice-template-details/lifetime-interval'; export class InvoiceTemplate { id: string; diff --git a/src/app/backend/model/logic-error.ts b/src/app/backend/model/logic-error.ts index 81a2695d..879d4d83 100644 --- a/src/app/backend/model/logic-error.ts +++ b/src/app/backend/model/logic-error.ts @@ -20,7 +20,7 @@ export enum LogicErrorCode { invalidClaimStatus = 'invalidClaimStatus', invalidClaimRevision = 'invalidClaimRevision', limitExceeded = 'limitExceeded', - invalidRequest = 'invalidRequest' + invalidRequest = 'invalidRequest', } export class LogicError { diff --git a/src/app/backend/model/payer/payer-type.ts b/src/app/backend/model/payer/payer-type.ts index af465d7a..05f34259 100644 --- a/src/app/backend/model/payer/payer-type.ts +++ b/src/app/backend/model/payer/payer-type.ts @@ -1,4 +1,4 @@ export enum PayerType { CustomerPayer = 'CustomerPayer', - PaymentResourcePayer = 'PaymentResourcePayer' + PaymentResourcePayer = 'PaymentResourcePayer', } diff --git a/src/app/backend/model/payer/payment-resource-payer.ts b/src/app/backend/model/payer/payment-resource-payer.ts index 52a2b30e..baaa6d1c 100644 --- a/src/app/backend/model/payer/payment-resource-payer.ts +++ b/src/app/backend/model/payer/payment-resource-payer.ts @@ -1,6 +1,5 @@ import { Payer } from './payer'; import { ContactInfo } from '../contact-info'; -import { PayerType } from './payer-type'; import { PaymentToolDetails } from '../payment-tool-details'; export type SessionInfo = { @@ -8,7 +7,6 @@ export type SessionInfo = { }; export class PaymentResourcePayer extends Payer { - payerType: PayerType.PaymentResourcePayer; paymentToolToken: string; paymentSession: string; contactInfo: ContactInfo; diff --git a/src/app/backend/model/payment-flow/flow-type.ts b/src/app/backend/model/payment-flow/flow-type.ts index 3677e99e..9f0ef945 100644 --- a/src/app/backend/model/payment-flow/flow-type.ts +++ b/src/app/backend/model/payment-flow/flow-type.ts @@ -1,4 +1,4 @@ export enum FlowType { PaymentFlowInstant = 'PaymentFlowInstant', - PaymentFlowHold = 'PaymentFlowHold' + PaymentFlowHold = 'PaymentFlowHold', } diff --git a/src/app/backend/model/payment-flow/hold-expiration-type.ts b/src/app/backend/model/payment-flow/hold-expiration-type.ts index ca5d84a8..903ab6b7 100644 --- a/src/app/backend/model/payment-flow/hold-expiration-type.ts +++ b/src/app/backend/model/payment-flow/hold-expiration-type.ts @@ -1,4 +1,4 @@ export enum HoldExpirationType { cancel = 'cancel', - capture = 'capture' + capture = 'capture', } diff --git a/src/app/backend/model/payment-flow/payment-flow-hold.ts b/src/app/backend/model/payment-flow/payment-flow-hold.ts index 3796b27f..bbb7ea9b 100644 --- a/src/app/backend/model/payment-flow/payment-flow-hold.ts +++ b/src/app/backend/model/payment-flow/payment-flow-hold.ts @@ -1,8 +1,6 @@ -import { PaymentFlow } from './payment-flow'; -import { FlowType } from './flow-type'; import { HoldExpirationType } from './hold-expiration-type'; +import { PaymentFlow } from './payment-flow'; export class PaymentFlowHold extends PaymentFlow { - type: FlowType.PaymentFlowHold; onHoldExpiration: HoldExpirationType; } diff --git a/src/app/backend/model/payment-flow/payment-flow-instant.ts b/src/app/backend/model/payment-flow/payment-flow-instant.ts index 290e5c07..74cdf56b 100644 --- a/src/app/backend/model/payment-flow/payment-flow-instant.ts +++ b/src/app/backend/model/payment-flow/payment-flow-instant.ts @@ -1,6 +1,3 @@ import { PaymentFlow } from './payment-flow'; -import { FlowType } from './flow-type'; -export class PaymentFlowInstant extends PaymentFlow { - type: FlowType.PaymentFlowInstant; -} +export class PaymentFlowInstant extends PaymentFlow {} diff --git a/src/app/backend/model/payment-method.ts b/src/app/backend/model/payment-method.ts index 61cbad11..b215e297 100644 --- a/src/app/backend/model/payment-method.ts +++ b/src/app/backend/model/payment-method.ts @@ -1,7 +1,7 @@ export enum PaymentMethodName { BankCard = 'BankCard', PaymentTerminal = 'PaymentTerminal', - DigitalWallet = 'DigitalWallet' + DigitalWallet = 'DigitalWallet', } export abstract class PaymentMethod { diff --git a/src/app/backend/model/payment-params.ts b/src/app/backend/model/payment-params.ts index 9acbfb89..e8a08956 100644 --- a/src/app/backend/model/payment-params.ts +++ b/src/app/backend/model/payment-params.ts @@ -1,5 +1,5 @@ -import { PaymentFlow } from './payment-flow'; import { Payer } from './payer'; +import { PaymentFlow } from './payment-flow'; export class PaymentParams { flow: PaymentFlow; diff --git a/src/app/backend/model/payment-status.ts b/src/app/backend/model/payment-status.ts index eae49a25..983f1853 100644 --- a/src/app/backend/model/payment-status.ts +++ b/src/app/backend/model/payment-status.ts @@ -4,5 +4,5 @@ export enum PaymentStatus { captured = 'captured', cancelled = 'cancelled', refunded = 'refunded', - failed = 'failed' + failed = 'failed', } diff --git a/src/app/backend/model/payment-system.ts b/src/app/backend/model/payment-system.ts index 072462f1..c555e572 100644 --- a/src/app/backend/model/payment-system.ts +++ b/src/app/backend/model/payment-system.ts @@ -10,5 +10,5 @@ export enum PaymentSystem { discover = 'discover', unionpay = 'unionpay', jcb = 'jcb', - nspkmir = 'nspkmir' + nspkmir = 'nspkmir', } diff --git a/src/app/backend/model/payment-terminal.ts b/src/app/backend/model/payment-terminal.ts index 77107189..e6aba0df 100644 --- a/src/app/backend/model/payment-terminal.ts +++ b/src/app/backend/model/payment-terminal.ts @@ -1,6 +1,5 @@ -import { PaymentMethod, PaymentMethodName } from './payment-method'; +import { PaymentMethod } from './payment-method'; export class PaymentTerminal extends PaymentMethod { - method: PaymentMethodName.PaymentTerminal; providers: string[]; } diff --git a/src/app/backend/model/payment-tool-details/payment-tool-details-type.ts b/src/app/backend/model/payment-tool-details/payment-tool-details-type.ts index 97665870..fc843e2b 100644 --- a/src/app/backend/model/payment-tool-details/payment-tool-details-type.ts +++ b/src/app/backend/model/payment-tool-details/payment-tool-details-type.ts @@ -1,5 +1,5 @@ export enum PaymentToolDetailsType { PaymentToolDetailsBankCard = 'PaymentToolDetailsBankCard', PaymentToolDetailsPaymentTerminal = 'PaymentToolDetailsPaymentTerminal', - PaymentToolDetailsDigitalWallet = 'PaymentToolDetailsDigitalWallet' + PaymentToolDetailsDigitalWallet = 'PaymentToolDetailsDigitalWallet', } diff --git a/src/app/backend/model/payment-tool/payment-tool-type.ts b/src/app/backend/model/payment-tool/payment-tool-type.ts index 700d29ce..fbe24c65 100644 --- a/src/app/backend/model/payment-tool/payment-tool-type.ts +++ b/src/app/backend/model/payment-tool/payment-tool-type.ts @@ -1,5 +1,5 @@ export enum PaymentToolType { CardData = 'CardData', PaymentTerminalData = 'PaymentTerminalData', - DigitalWalletData = 'DigitalWalletData' + DigitalWalletData = 'DigitalWalletData', } diff --git a/src/app/backend/model/payment.ts b/src/app/backend/model/payment.ts index 13184c0d..7db589ee 100644 --- a/src/app/backend/model/payment.ts +++ b/src/app/backend/model/payment.ts @@ -1,8 +1,9 @@ -import { PaymentFlow } from './payment-flow'; -import { Payer } from './payer'; -import { PaymentStatus } from './payment-status'; import { PaymentError } from 'checkout/backend'; +import { Payer } from './payer'; +import { PaymentFlow } from './payment-flow'; +import { PaymentStatus } from './payment-status'; + export class Payment { id: string; invoiceID: string; diff --git a/src/app/backend/shorten-url.ts b/src/app/backend/shorten-url.ts index 916fb182..79aa8fda 100644 --- a/src/app/backend/shorten-url.ts +++ b/src/app/backend/shorten-url.ts @@ -4,11 +4,11 @@ import { ShortenedUrl, ShortenedUrlParams } from './model'; export const shortenUrl = ( urlShortenerEndpoint: string, accessToken: string, - params: ShortenedUrlParams + params: ShortenedUrlParams, ): Promise => fetchCapi({ method: 'POST', endpoint: `${urlShortenerEndpoint}/v1/shortened-urls`, accessToken, - body: params + body: params, }); diff --git a/src/app/components/app/app.tsx b/src/app/components/app/app.tsx index 2b70dae0..b406e5db 100644 --- a/src/app/components/app/app.tsx +++ b/src/app/components/app/app.tsx @@ -1,16 +1,16 @@ -import * as React from 'react'; import { useEffect, useState } from 'react'; import { ThemeProvider } from 'styled-components'; +import { useInitApp, useTheme } from 'checkout/hooks'; import { InitParams } from 'checkout/initialize'; -import { Overlay } from './overlay'; -import { ModalContainer } from './modal-container'; -import { LayoutLoader } from './layout-loader'; + import { AppWrapper } from './app-wrapper'; import { GlobalStyle } from './global-style'; import { InitialContext } from './initial-context'; -import { useInitApp, useTheme } from 'checkout/hooks'; +import { LayoutLoader } from './layout-loader'; +import { ModalContainer } from './modal-container'; import { ModalError } from './modal-error'; +import { Overlay } from './overlay'; import { ResultContext } from './result-context'; export type AppProps = { diff --git a/src/app/components/app/global-style.tsx b/src/app/components/app/global-style.tsx index 7c38a65e..1932461f 100644 --- a/src/app/components/app/global-style.tsx +++ b/src/app/components/app/global-style.tsx @@ -1,4 +1,5 @@ import { createGlobalStyle } from 'styled-components'; + import { device } from 'checkout/utils/device'; export const GlobalStyle = createGlobalStyle` diff --git a/src/app/components/app/initial-context.ts b/src/app/components/app/initial-context.ts index 92d46bf6..606b6ba8 100644 --- a/src/app/components/app/initial-context.ts +++ b/src/app/components/app/initial-context.ts @@ -1,4 +1,5 @@ import { createContext } from 'react'; + import { InitialData } from 'checkout/hooks'; export const InitialContext = createContext(null); diff --git a/src/app/components/app/layout-loader.tsx b/src/app/components/app/layout-loader.tsx index e608c4c2..0395d5b6 100644 --- a/src/app/components/app/layout-loader.tsx +++ b/src/app/components/app/layout-loader.tsx @@ -1,9 +1,9 @@ -import * as React from 'react'; import styled, { keyframes } from 'styled-components'; -import { Loader } from '../ui/loader'; import { device } from 'checkout/utils/device'; +import { Loader } from '../ui/loader'; + const growth = keyframes` from { transform: scale(0); diff --git a/src/app/components/app/modal-container/modal-container.tsx b/src/app/components/app/modal-container/modal-container.tsx index 3cce26db..9e2c54ba 100644 --- a/src/app/components/app/modal-container/modal-container.tsx +++ b/src/app/components/app/modal-container/modal-container.tsx @@ -1,18 +1,18 @@ -import * as React from 'react'; -import { useContext, useEffect, useMemo, useState } from 'react'; import { motion } from 'framer-motion'; +import { useContext, useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; -import isNil from 'checkout/utils/is-nil'; -import { Modal } from './modal'; -import { UserInteractionModal } from './user-interaction-modal'; -import { ModalName, ResultFormInfo, ResultType } from 'checkout/hooks'; -import { InitialContext } from '../initial-context'; -import { PayableInvoiceContext } from './payable-invoice-context'; -import { PayableInvoiceData, useInvoiceEvents, useModal } from 'checkout/hooks'; import { InvoiceChangeType } from 'checkout/backend'; +import { ModalName, ResultFormInfo, ResultType } from 'checkout/hooks'; +import { PayableInvoiceData, useInvoiceEvents, useModal } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; + +import { Modal } from './modal'; import { ModalContext } from './modal-context'; +import { PayableInvoiceContext } from './payable-invoice-context'; import { useInteractionModel } from './use-interaction-model'; +import { UserInteractionModal } from './user-interaction-modal'; +import { InitialContext } from '../initial-context'; const Container = styled.div` height: 100%; @@ -24,7 +24,7 @@ export const ModalContainer = () => { appConfig: { capiEndpoint }, initConfig, model: { serviceProviders, invoice, invoiceAccessToken }, - availablePaymentMethods + availablePaymentMethods, } = useContext(InitialContext); const { modalState, @@ -34,11 +34,11 @@ export const ModalContainer = () => { prepareToRetry, forgetPaymentAttempt, setViewInfoError, - toInteractionState + toInteractionState, } = useModal({ integrationType: initConfig.integrationType, availablePaymentMethods, - serviceProviders + serviceProviders, }); const [payableInvoiceData, setPayableInvoiceData] = useState(null); const { eventsState, startPolling, searchEventsChange } = useInvoiceEvents(capiEndpoint, payableInvoiceData); @@ -50,9 +50,9 @@ export const ModalContainer = () => { invoice: { id: invoice.id, dueDate: invoice.dueDate, - externalID: invoice.externalID + externalID: invoice.externalID, }, - invoiceAccessToken + invoiceAccessToken, }); } }, []); @@ -85,8 +85,8 @@ export const ModalContainer = () => { case InvoiceChangeType.PaymentStatusChanged: goToFormInfo( new ResultFormInfo(ResultType.hookProcessed, { - change - }) + change, + }), ); break; } @@ -100,8 +100,8 @@ export const ModalContainer = () => { if (eventsState.status === 'FAILURE') { goToFormInfo( new ResultFormInfo(ResultType.hookError, { - error: eventsState.error - }) + error: eventsState.error, + }), ); } }, [payableInvoiceData, eventsState]); @@ -114,7 +114,7 @@ export const ModalContainer = () => { const activeModalName = useMemo(() => modalState.find((modal) => modal.active).name, [modalState]); return ( - + { prepareToPay, prepareToRetry, forgetPaymentAttempt, - setViewInfoError - }}> + setViewInfoError, + }} + > {activeModalName === ModalName.modalForms && } {activeModalName === ModalName.modalInteraction && } diff --git a/src/app/components/app/modal-container/modal/footer.tsx b/src/app/components/app/modal-container/modal/footer.tsx index 2578fe6e..9a6cb093 100644 --- a/src/app/components/app/modal-container/modal/footer.tsx +++ b/src/app/components/app/modal-container/modal/footer.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { ReactSVG } from 'react-svg'; import { useContext } from 'react'; +import { ReactSVG } from 'react-svg'; import styled from 'styled-components'; import { InitialContext } from '../../initial-context'; diff --git a/src/app/components/app/modal-container/modal/form-block.tsx b/src/app/components/app/modal-container/modal/form-block.tsx index 73cde207..50ee3496 100644 --- a/src/app/components/app/modal-container/modal/form-block.tsx +++ b/src/app/components/app/modal-container/modal/form-block.tsx @@ -1,4 +1,5 @@ import styled from 'styled-components'; + import { device } from 'checkout/utils/device'; export const FormBlock = styled.div` diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx index 65ee6301..2b068169 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx @@ -1,26 +1,25 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; import { useForm, SubmitHandler } from 'react-hook-form'; -import { FormGroup } from '../form-group'; -import { CardHolder, CardNumber, ExpireDate, SecureCode } from './fields'; import { ResultFormInfo, ResultType } from 'checkout/hooks'; -import { PayButton } from '../pay-button'; -import { Header } from '../header'; -import { toAmountConfig, toCardHolderConfig } from '../fields-config'; -import { Amount } from '../common-fields'; import { PaymentMethodName, useCreatePayment } from 'checkout/hooks'; import { isEmptyObject } from 'checkout/utils/is-empty-object'; -import { CardFormInputs } from './card-form-inputs'; +import { CardFormInputs } from './card-form-inputs'; +import { CardHolder, CardNumber, ExpireDate, SecureCode } from './fields'; import { InitialContext } from '../../../../initial-context'; import { ModalContext } from '../../../modal-context'; +import { Amount } from '../common-fields'; +import { toAmountConfig, toCardHolderConfig } from '../fields-config'; +import { FormGroup } from '../form-group'; +import { Header } from '../header'; +import { PayButton } from '../pay-button'; export const CardForm = ({ onMount }: { onMount: () => void }) => { const { locale, initConfig, - model: { invoiceTemplate } + model: { invoiceTemplate }, } = useContext(InitialContext); const { setViewInfoError, goToFormInfo, prepareToPay } = useContext(ModalContext); const { createPaymentState, setFormData } = useCreatePayment(); @@ -28,7 +27,7 @@ export const CardForm = ({ onMount }: { onMount: () => void }) => { register, handleSubmit, watch, - formState: { errors, dirtyFields, isSubmitted } + formState: { errors, dirtyFields, isSubmitted }, } = useForm({ mode: 'onChange' }); const cardHolder = toCardHolderConfig(initConfig.requireCardHolder); const amount = toAmountConfig(initConfig, invoiceTemplate); @@ -47,8 +46,8 @@ export const CardForm = ({ onMount }: { onMount: () => void }) => { if (createPaymentState.status === 'FAILURE') { goToFormInfo( new ResultFormInfo(ResultType.hookError, { - error: createPaymentState.error - }) + error: createPaymentState.error, + }), ); } }, [createPaymentState]); @@ -63,35 +62,35 @@ export const CardForm = ({ onMount }: { onMount: () => void }) => {
{cardHolder.visible && ( @@ -100,10 +99,10 @@ export const CardForm = ({ onMount }: { onMount: () => void }) => { diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/card-holder.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/card-holder.tsx index 2902f1e0..02d9deee 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/card-holder.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/card-holder.tsx @@ -1,13 +1,13 @@ -import * as React from 'react'; import { FieldError, UseFormRegister } from 'react-hook-form'; -import { validateCardHolder } from './validate-card-holder'; -import { Locale } from 'checkout/locale'; -import { formatCardHolder } from './format-card-holder'; import { Input } from 'checkout/components'; -import { CardFormInputs } from '../../card-form-inputs'; +import { Locale } from 'checkout/locale'; import isNil from 'checkout/utils/is-nil'; + +import { formatCardHolder } from './format-card-holder'; +import { validateCardHolder } from './validate-card-holder'; import { ReactComponent as UserIcon } from '../../../../../../../ui/icon/user.svg'; +import { CardFormInputs } from '../../card-form-inputs'; export type CardHolderProps = { register: UseFormRegister; @@ -20,16 +20,16 @@ export const CardHolder = ({ register, locale, fieldError, isDirty }: CardHolder !validateCardHolder(value) || 'Card holder is invalid' + validate: (value) => !validateCardHolder(value) || 'Card holder is invalid', })} - icon={} - placeholder={locale['form.input.cardholder.placeholder']} - mark={true} - id="card-holder-input" - onInput={formatCardHolder} autoComplete="cc-name" - spellCheck={false} - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + icon={} + id="card-holder-input" + mark={true} + placeholder={locale['form.input.cardholder.placeholder']} + spellCheck={false} + onInput={formatCardHolder} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/format-card-holder.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/format-card-holder.ts index 7932493e..98450940 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/format-card-holder.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-holder/format-card-holder.ts @@ -1,6 +1,7 @@ -import { safeVal } from 'checkout/utils'; import { FormEvent } from 'react'; +import { safeVal } from 'checkout/utils'; + export const formatCardHolder = (e: FormEvent) => { const target = e.currentTarget; let value = target.value; diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/card-number.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/card-number.tsx index 313645dd..8d76b527 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/card-number.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/card-number.tsx @@ -1,15 +1,15 @@ -import * as React from 'react'; import { FieldError, UseFormRegister, UseFormWatch } from 'react-hook-form'; import styled from 'styled-components'; -import { validateCardNumber } from './validate-card-number'; import { Input } from 'checkout/components'; -import { Locale } from 'checkout/locale'; -import { formatCardNumber } from './format-card-number'; -import isNil from 'checkout/utils/is-nil'; -import { CardFormInputs } from '../../card-form-inputs'; -import { ReactComponent as CardIcon } from '../../../../../../../ui/icon/card.svg'; import { CardTypeIcon } from 'checkout/components/ui/card-type-icon'; +import { Locale } from 'checkout/locale'; +import isNil from 'checkout/utils/is-nil'; + +import { formatCardNumber } from './format-card-number'; +import { validateCardNumber } from './validate-card-number'; +import { ReactComponent as CardIcon } from '../../../../../../../ui/icon/card.svg'; +import { CardFormInputs } from '../../card-form-inputs'; const InputContainer = styled.div` width: 100%; @@ -35,17 +35,17 @@ export const CardNumber = ({ register, locale, fieldError, isDirty, watch }: Car !validateCardNumber(value) || 'Card number is invalid' + validate: (value) => !validateCardNumber(value) || 'Card number is invalid', })} - icon={} - placeholder={locale['form.input.card.placeholder']} - mark={true} - type="tel" - id="card-number-input" - onInput={formatCardNumber} autoComplete="cc-number" - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + icon={} + id="card-number-input" + mark={true} + placeholder={locale['form.input.card.placeholder']} + type="tel" + onInput={formatCardNumber} /> diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/format-card-number.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/format-card-number.ts index fd55c3a2..1e676fa0 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/format-card-number.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/card-number/format-card-number.ts @@ -1,5 +1,6 @@ -import { FormEvent } from 'react'; import { number } from 'card-validator'; +import { FormEvent } from 'react'; + import { replaceFullWidthChars, safeVal } from 'checkout/utils'; function format(num: string): string { diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/expire-date.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/expire-date.tsx index f04576fe..1b4fb20d 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/expire-date.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/expire-date.tsx @@ -1,13 +1,13 @@ -import * as React from 'react'; import { FieldError, UseFormRegister } from 'react-hook-form'; -import { validateExpireDate } from './validate-expire-date'; -import { Locale } from 'checkout/locale'; -import { formatExpiry } from './format-expiry'; import { Input } from 'checkout/components'; -import { CardFormInputs } from '../../card-form-inputs'; +import { Locale } from 'checkout/locale'; import isNil from 'checkout/utils/is-nil'; + +import { formatExpiry } from './format-expiry'; +import { validateExpireDate } from './validate-expire-date'; import { ReactComponent as CalendarIcon } from '../../../../../../../ui/icon/calendar.svg'; +import { CardFormInputs } from '../../card-form-inputs'; export type ExpireDateProps = { register: UseFormRegister; @@ -20,16 +20,16 @@ export const ExpireDate = ({ register, locale, fieldError, isDirty }: ExpireDate !validateExpireDate(value) || 'Exp date is invalid' + validate: (value) => !validateExpireDate(value) || 'Exp date is invalid', })} - icon={} - placeholder={locale['form.input.expiry.placeholder']} - mark={true} - type="tel" - id="expire-date-input" - onInput={formatExpiry} autoComplete="cc-exp" - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + icon={} + id="expire-date-input" + mark={true} + placeholder={locale['form.input.expiry.placeholder']} + type="tel" + onInput={formatExpiry} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/format-expiry.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/format-expiry.ts index 9af41b70..49692892 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/format-expiry.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/format-expiry.ts @@ -1,6 +1,7 @@ -import { replaceFullWidthChars, safeVal } from 'checkout/utils'; import { FormEvent } from 'react'; +import { replaceFullWidthChars, safeVal } from 'checkout/utils'; + function format(expiry: string): string { const parts = expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/); if (!parts) { diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/card-expiry-val.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/card-expiry-val.ts index 98829482..464082c1 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/card-expiry-val.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/card-expiry-val.ts @@ -8,7 +8,7 @@ export function cardExpiryVal(value: string): ExpiryDate { let prefix; let year; let ref; - (ref = value.split(/[\s\/]+/, 2)), (month = ref[0]), (year = ref[1]); + (ref = value.split(/[\s]+/, 2)), (month = ref[0]), (year = ref[1]); if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) { prefix = new Date().getFullYear(); prefix = prefix.toString().slice(0, 2); @@ -18,6 +18,6 @@ export function cardExpiryVal(value: string): ExpiryDate { year = parseInt(year, 10); return { month, - year + year, }; } diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/format-cvc.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/format-cvc.ts index 0796c595..2e1ad90d 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/format-cvc.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/format-cvc.ts @@ -1,4 +1,5 @@ import { number } from 'card-validator'; + import { replaceFullWidthChars } from 'checkout/utils'; export function formatCVC(value: string, cardNumber: string): string { diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/secure-code.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/secure-code.tsx index 826bc152..1c664cfc 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/secure-code.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/secure-code/secure-code.tsx @@ -1,15 +1,15 @@ -import * as React from 'react'; import { number } from 'card-validator'; import { FieldError, UseFormRegister } from 'react-hook-form'; -import { validateSecureCode } from './validate-secure-code'; -import { Locale } from 'checkout/locale'; -import { formatCVC } from './format-cvc'; import { Input } from 'checkout/components'; +import { Locale } from 'checkout/locale'; import { safeVal } from 'checkout/utils'; -import { CardFormInputs } from '../../card-form-inputs'; import isNil from 'checkout/utils/is-nil'; + +import { formatCVC } from './format-cvc'; +import { validateSecureCode } from './validate-secure-code'; import { ReactComponent as LockIcon } from '../../../../../../../ui/icon/lock.svg'; +import { CardFormInputs } from '../../card-form-inputs'; export interface SecureCodeProps { register: UseFormRegister; @@ -29,19 +29,19 @@ export const SecureCode = ({ cardNumber, locale, obscureCardCvv, register, field !validateSecureCode(value, { cardNumber }) || 'Secure code is invalid' + validate: (value) => !validateSecureCode(value, { cardNumber }) || 'Secure code is invalid', })} - icon={} - placeholder={getPlaceholder(cardNumber, locale)} - mark={true} - type={obscureCardCvv ? 'password' : 'tel'} - id="secure-code-input" autoComplete="cc-csc" - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + icon={} + id="secure-code-input" + mark={true} + placeholder={getPlaceholder(cardNumber, locale)} + type={obscureCardCvv ? 'password' : 'tel'} onInput={(e) => { const target = e.currentTarget; - let value = target.value; + const value = target.value; const formatted = formatCVC(value, cardNumber); return safeVal(formatted, target); }} diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/amount.tsx b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/amount.tsx index 0932279c..dca92b23 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/amount.tsx +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/amount.tsx @@ -1,13 +1,13 @@ -import * as React from 'react'; import { FieldError, UseFormRegister } from 'react-hook-form'; +import { InvoiceTemplateLineCostRange, InvoiceTemplateLineCostUnlim } from 'checkout/backend'; import { Input } from 'checkout/components'; +import { Locale } from 'checkout/locale'; +import isNil from 'checkout/utils/is-nil'; + +import { formatAmount } from './format-amount'; import { getPlaceholder } from './get-placeholder'; import { validateAmount } from './validate-amount'; -import { Locale } from 'checkout/locale'; -import { InvoiceTemplateLineCostRange, InvoiceTemplateLineCostUnlim } from 'checkout/backend'; -import { formatAmount } from './format-amount'; -import isNil from 'checkout/utils/is-nil'; import { ReactComponent as AmountIcon } from '../../../../../../ui/icon/amount.svg'; export type AmountProps = { @@ -23,15 +23,15 @@ export const Amount = ({ register, locale, fieldError, cost, localeCode, isDirty !validateAmount(value, cost) || 'Amount is invalid' + validate: (value) => !validateAmount(value, cost) || 'Amount is invalid', })} - icon={} - placeholder={getPlaceholder(cost, locale['form.input.amount.placeholder'], localeCode)} - mark={true} - type="tel" - id="amount-input" - onInput={formatAmount} - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + icon={} + id="amount-input" + mark={true} + placeholder={getPlaceholder(cost, locale['form.input.amount.placeholder'], localeCode)} + type="tel" + onInput={formatAmount} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/format-amount.ts b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/format-amount.ts index 41fd76bb..139a26a7 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/format-amount.ts +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/format-amount.ts @@ -1,6 +1,7 @@ -import { replaceFullWidthChars, safeVal } from 'checkout/utils'; import { FormEvent } from 'react'; +import { replaceFullWidthChars, safeVal } from 'checkout/utils'; + const createNumArr = (num: string): string[] => { let numTempArr; if (/^\d+(\.\d+)?$/.test(num)) { diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/get-placeholder.ts b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/get-placeholder.ts index 72065208..f0e57cf2 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/get-placeholder.ts +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/get-placeholder.ts @@ -9,13 +9,13 @@ const toRangePlaceholder = (cost: InvoiceTemplateLineCostRange, locale: string): minorValue: range.lowerBound, currencyCode: cost.currency, status: 'final', - locale + locale, }); const upper = formatAmount({ minorValue: range.upperBound, currencyCode: cost.currency, status: 'final', - locale + locale, }); return `${lower} - ${upper}`; }; @@ -23,7 +23,7 @@ const toRangePlaceholder = (cost: InvoiceTemplateLineCostRange, locale: string): export const getPlaceholder = ( cost: InvoiceTemplateLineCostRange | InvoiceTemplateLineCostUnlim, localeString: string, - localeCode: string + localeCode: string, ): string => { if (!cost) { return; diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/validate-amount.ts b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/validate-amount.ts index 597f7031..4b043e5c 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/amount/validate-amount.ts +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/amount/validate-amount.ts @@ -1,6 +1,6 @@ -import toNumber from 'checkout/utils/to-number'; -import isNumber from 'checkout/utils/is-number'; import { CostType, InvoiceTemplateLineCostRange, InvoiceTemplateLineCostUnlim } from 'checkout/backend'; +import isNumber from 'checkout/utils/is-number'; +import toNumber from 'checkout/utils/to-number'; function validate(amount: number, min?: number, max?: number): boolean { if (!amount || !isNumber(amount) || amount <= 0) { @@ -14,7 +14,7 @@ function validate(amount: number, min?: number, max?: number): boolean { export const validateAmount = ( value: string, - cost: InvoiceTemplateLineCostRange | InvoiceTemplateLineCostUnlim + cost: InvoiceTemplateLineCostRange | InvoiceTemplateLineCostUnlim, ): boolean => { if (value) { value = value.replace(/\s/g, '').replace(/,/g, '.'); diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/email/email.tsx b/src/app/components/app/modal-container/modal/form-container/common-fields/email/email.tsx index c8578b55..f5c88fe4 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/email/email.tsx +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/email/email.tsx @@ -1,8 +1,8 @@ -import * as React from 'react'; import { FieldError, FieldErrorsImpl, Merge, UseFormRegister } from 'react-hook-form'; -import { formatEmail, validateEmail } from 'checkout/utils'; -import { Locale } from 'checkout/locale'; + import { Input } from 'checkout/components'; +import { Locale } from 'checkout/locale'; +import { formatEmail, validateEmail } from 'checkout/utils'; import isNil from 'checkout/utils/is-nil'; export type EmailProps = { @@ -16,15 +16,15 @@ export const Email = ({ register, locale, fieldError, isDirty }: EmailProps) => !validateEmail(value) || 'Email is invalid' + validate: (value) => !validateEmail(value) || 'Email is invalid', })} - placeholder={locale['form.input.email.placeholder']} - mark={true} - type="email" - id="email-input" - onInput={formatEmail} autoComplete="email" - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + id="email-input" + mark={true} + placeholder={locale['form.input.email.placeholder']} + type="email" + onInput={formatEmail} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/common-fields/phone/phone.tsx b/src/app/components/app/modal-container/modal/form-container/common-fields/phone/phone.tsx index b9aae4f8..e85fe13d 100644 --- a/src/app/components/app/modal-container/modal/form-container/common-fields/phone/phone.tsx +++ b/src/app/components/app/modal-container/modal/form-container/common-fields/phone/phone.tsx @@ -1,8 +1,7 @@ -import * as React from 'react'; import { FieldError, FieldErrorsImpl, Merge, UseFormRegister } from 'react-hook-form'; -import { Locale } from 'checkout/locale'; import { Input } from 'checkout/components'; +import { Locale } from 'checkout/locale'; import { formatPhoneNumber, validatePhone } from 'checkout/utils'; import isNil from 'checkout/utils/is-nil'; @@ -17,16 +16,16 @@ export const Phone = ({ register, locale, fieldError, isDirty }: PhoneProps) => !validatePhone(value) || 'Phone number is invalid' + validate: (value) => !validatePhone(value) || 'Phone number is invalid', })} - placeholder={locale['form.input.phone.placeholder']} - mark={true} - type="tel" - id="phone-input" - onInput={formatPhoneNumber} - onFocus={formatPhoneNumber} autoComplete="tel" - error={!isNil(fieldError)} dirty={isDirty} + error={!isNil(fieldError)} + id="phone-input" + mark={true} + placeholder={locale['form.input.phone.placeholder']} + type="tel" + onFocus={formatPhoneNumber} + onInput={formatPhoneNumber} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/fields-config/to-fields-config.ts b/src/app/components/app/modal-container/modal/form-container/fields-config/to-fields-config.ts index 8cdd6bf2..ae4d5f75 100644 --- a/src/app/components/app/modal-container/modal/form-container/fields-config/to-fields-config.ts +++ b/src/app/components/app/modal-container/modal/form-container/fields-config/to-fields-config.ts @@ -2,9 +2,10 @@ import { InvoiceTemplate, InvoiceTemplateLineCostRange, InvoiceTemplateLineCostUnlim, - InvoiceTemplateSingleLine + InvoiceTemplateSingleLine, } from 'checkout/backend'; import { InitConfig } from 'checkout/config'; + import { AmountConfig, EmailConfig, FieldsConfig, PhoneNumberConfig } from './fields-config'; const toSingleLineAmountConfig = (c: InvoiceTemplateSingleLine): AmountConfig => { @@ -47,12 +48,12 @@ export const toEmailConfig = (email: string): EmailConfig => { }; export const toCardHolderConfig = (requireCardHolder: boolean | null) => ({ - visible: requireCardHolder === null ? true : requireCardHolder + visible: requireCardHolder === null ? true : requireCardHolder, }); export const toFieldsConfig = (c: InitConfig, t: InvoiceTemplate): FieldsConfig => ({ amount: toAmountConfig(c, t), email: toEmailConfig(c.email), cardHolder: toCardHolderConfig(c.requireCardHolder), - phoneNumber: toPhoneNumberConfig(c.phoneNumber) + phoneNumber: toPhoneNumberConfig(c.phoneNumber), }); diff --git a/src/app/components/app/modal-container/modal/form-container/form-container.tsx b/src/app/components/app/modal-container/modal/form-container/form-container.tsx index 6dd66e22..185c050e 100644 --- a/src/app/components/app/modal-container/modal/form-container/form-container.tsx +++ b/src/app/components/app/modal-container/modal/form-container/form-container.tsx @@ -1,23 +1,22 @@ -import * as React from 'react'; -import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import { motion } from 'framer-motion'; +import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import styled from 'styled-components'; -import { CardForm } from './card-form'; import { FormName, ModalForms, ModalName, SlideDirection } from 'checkout/hooks'; -import { PaymentMethods } from './payment-methods'; -import { FormLoader } from './form-loader'; -import { ResultForm } from './result-form'; -import { WalletForm } from './wallet-form'; import { findNamed } from 'checkout/utils'; import { device } from 'checkout/utils/device'; -import { NoAvailablePaymentMethodForm } from './no-available-payment-method-form'; -import { WalletProviders } from './wallet-providers'; -import { RedirectForm } from './redirect-form'; -import { PaymentTerminalForm } from './payment-terminal-form'; -import { QrCodeInteractionForm } from './qr-code-interaction-form'; -import { PaymentTerminalSelectorForm } from './payment-terminal-selector-form'; +import { CardForm } from './card-form'; +import { FormLoader } from './form-loader'; +import { NoAvailablePaymentMethodForm } from './no-available-payment-method-form'; +import { PaymentMethods } from './payment-methods'; +import { PaymentTerminalForm } from './payment-terminal-form'; +import { PaymentTerminalSelectorForm } from './payment-terminal-selector-form'; +import { QrCodeInteractionForm } from './qr-code-interaction-form'; +import { RedirectForm } from './redirect-form'; +import { ResultForm } from './result-form'; +import { WalletForm } from './wallet-form'; +import { WalletProviders } from './wallet-providers'; import { ModalContext } from '../../modal-context'; const Container = styled.div` @@ -87,12 +86,12 @@ export const FormContainer = () => { const { formName, - viewInfo: { slideDirection, inProcess } + viewInfo: { slideDirection, inProcess }, } = useMemo(() => { const found = findNamed(modalState, ModalName.modalForms) as ModalForms; return { formName: found.formsInfo.find((item) => item.active)?.name, - viewInfo: found.viewInfo + viewInfo: found.viewInfo, }; }, [modalState]); @@ -111,11 +110,12 @@ export const FormContainer = () => {
+ initial={{ x: toInitialPos(slideDirection) }} + transition={{ duration: 0.3 }} + > {renderForm(formName, onMount)} {inProcess && } diff --git a/src/app/components/app/modal-container/modal/form-container/form-group.tsx b/src/app/components/app/modal-container/modal/form-container/form-group.tsx index 9675d84e..080456da 100644 --- a/src/app/components/app/modal-container/modal/form-container/form-group.tsx +++ b/src/app/components/app/modal-container/modal/form-container/form-group.tsx @@ -1,6 +1,9 @@ import styled from 'styled-components'; -export const FormGroup = styled.div<{ direction?: 'column' | 'row'; $gap?: number }>` +export const FormGroup = styled.div<{ + direction?: 'column' | 'row'; + $gap?: number; +}>` display: flex; flex-wrap: nowrap; flex-direction: ${({ direction }) => direction || 'row'}; diff --git a/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx b/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx index 8d268da9..d56a602f 100644 --- a/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx +++ b/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import { motion } from 'framer-motion'; import styled from 'styled-components'; @@ -7,7 +6,7 @@ import { Loader } from 'checkout/components'; const fadeIn = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { duration: 0.5 } }, - exit: { opacity: 0, transition: { duration: 0.5 } } + exit: { opacity: 0, transition: { duration: 0.5 } }, }; const LoaderWrapper = styled.div` @@ -26,7 +25,7 @@ const LoaderWrapper = styled.div` `; export const FormLoader = () => ( - + diff --git a/src/app/components/app/modal-container/modal/form-container/get-available-terminal-payment-method.ts b/src/app/components/app/modal-container/modal/form-container/get-available-terminal-payment-method.ts index d1bbb5bc..e456030f 100644 --- a/src/app/components/app/modal-container/modal/form-container/get-available-terminal-payment-method.ts +++ b/src/app/components/app/modal-container/modal/form-container/get-available-terminal-payment-method.ts @@ -2,13 +2,13 @@ import { KnownProviderCategories, PaymentMethod, PaymentMethodName, - PaymentTerminalPaymentMethod + PaymentTerminalPaymentMethod, } from 'checkout/hooks'; import isNil from 'checkout/utils/is-nil'; export const getAvailableTerminalPaymentMethod = ( availablePaymentMethods: PaymentMethod[], - category: KnownProviderCategories + category: KnownProviderCategories, ): PaymentTerminalPaymentMethod | null => { if (isNil(category)) { return null; diff --git a/src/app/components/app/modal-container/modal/form-container/header/header.tsx b/src/app/components/app/modal-container/modal/form-container/header/header.tsx index 6a09f8cf..0addd429 100644 --- a/src/app/components/app/modal-container/modal/form-container/header/header.tsx +++ b/src/app/components/app/modal-container/modal/form-container/header/header.tsx @@ -1,14 +1,13 @@ -import * as React from 'react'; import { useContext } from 'react'; -import { findInfoWithPrevious, findNamed } from 'checkout/utils'; -import { FormInfo, ModalForms, ModalName, ModalState } from 'checkout/hooks'; -import { HeaderWrapper } from '../header-wrapper'; -import { Title } from '../title'; import { ChevronButton } from 'checkout/components'; +import { FormInfo, ModalForms, ModalName, ModalState } from 'checkout/hooks'; import { Direction } from 'checkout/hooks'; +import { findInfoWithPrevious, findNamed } from 'checkout/utils'; import { ModalContext } from '../../../modal-context'; +import { HeaderWrapper } from '../header-wrapper'; +import { Title } from '../title'; const getDestination = (modals: ModalState[]): FormInfo => { const modalForms = findNamed(modals, ModalName.modalForms) as ModalForms; @@ -24,9 +23,9 @@ export const Header = ({ title }: { title: string }) => { {destination && ( goToFormInfo(destination, Direction.back)} - id="desktop-back-btn" /> )} {title} diff --git a/src/app/components/app/modal-container/modal/form-container/no-available-payment-method-form/no-available-payment-method-form.tsx b/src/app/components/app/modal-container/modal/form-container/no-available-payment-method-form/no-available-payment-method-form.tsx index 0e17f7e6..dfc7508b 100644 --- a/src/app/components/app/modal-container/modal/form-container/no-available-payment-method-form/no-available-payment-method-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/no-available-payment-method-form/no-available-payment-method-form.tsx @@ -1,10 +1,8 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; import styled from 'styled-components'; -import { Text } from '../text'; - import { InitialContext } from '../../../../initial-context'; +import { Text } from '../text'; const Container = styled.div` padding: 80px 0; diff --git a/src/app/components/app/modal-container/modal/form-container/pay-button/pay-button.tsx b/src/app/components/app/modal-container/modal/form-container/pay-button/pay-button.tsx index fb1c3eb7..a0c9add9 100644 --- a/src/app/components/app/modal-container/modal/form-container/pay-button/pay-button.tsx +++ b/src/app/components/app/modal-container/modal/form-container/pay-button/pay-button.tsx @@ -1,11 +1,10 @@ -import * as React from 'react'; import { useContext } from 'react'; import styled from 'styled-components'; -import { formatAmount } from 'checkout/utils'; import { Button } from 'checkout/components'; -import { Locale } from 'checkout/locale'; import { AmountInfo } from 'checkout/hooks'; +import { Locale } from 'checkout/locale'; +import { formatAmount } from 'checkout/utils'; import { InitialContext } from '../../../../initial-context'; @@ -23,7 +22,7 @@ export const PayButton = () => { const { locale, amountInfo } = useContext(InitialContext); const label = toLabel(locale, amountInfo); return ( - + {label} ); diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/bank-card.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/bank-card.tsx index a7c43543..b0da5d14 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/bank-card.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/bank-card.tsx @@ -1,10 +1,9 @@ -import * as React from 'react'; import { useContext } from 'react'; -import { CardFormInfo, FormName } from 'checkout/hooks'; -import { Method } from './method'; import { PaymentMethodIcon, PaymentMethodTitle } from 'checkout/components/ui'; +import { CardFormInfo, FormName } from 'checkout/hooks'; +import { Method } from './method'; import { InitialContext } from '../../../../../initial-context'; import { ModalContext } from '../../../../modal-context'; @@ -17,7 +16,7 @@ export const BankCard = () => { }; return ( - + {locale['form.payment.method.name.card.label']} diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods-list.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods-list.tsx index 9980c75a..90139eaa 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods-list.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods-list.tsx @@ -1,9 +1,9 @@ -import * as React from 'react'; import styled from 'styled-components'; -import { Methods } from './methods'; import { PaymentMethod } from 'checkout/hooks'; +import { Methods } from './methods'; + const List = styled.ul` margin: 0; padding: 0; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods.tsx index f9164f50..05ad3164 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/methods.tsx @@ -1,16 +1,15 @@ -import * as React from 'react'; - -import { assertUnreachable } from 'checkout/utils'; -import { Wallets } from './wallets'; -import { BankCard } from './bank-card'; -import { WalletProviderPaymentMethodItem } from '../../wallet-provider-payment-method-item'; -import { PaymentTerminalMethodItems } from './payment-terminal-method-items'; import { DigitalWalletPaymentMethod, PaymentMethod, PaymentMethodName, - PaymentTerminalPaymentMethod + PaymentTerminalPaymentMethod, } from 'checkout/hooks'; +import { assertUnreachable } from 'checkout/utils'; + +import { BankCard } from './bank-card'; +import { PaymentTerminalMethodItems } from './payment-terminal-method-items'; +import { Wallets } from './wallets'; +import { WalletProviderPaymentMethodItem } from '../../wallet-provider-payment-method-item'; const Method = ({ method }: { method: PaymentMethod }) => { switch (method.name) { diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/category-content.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/category-content.tsx index 4e7c2def..057d6d75 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/category-content.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/category-content.tsx @@ -1,10 +1,13 @@ import * as React from 'react'; + import { KnownProviderCategories } from 'checkout/hooks'; -export const CategoryContent: React.FC<{ category: KnownProviderCategories }> = ({ category }) => { +export const CategoryContent: React.FC<{ + category: KnownProviderCategories; +}> = ({ category }) => { switch (category) { case 'netbanking': - return ; + return ; } return
{category}
; }; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/content.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/content.tsx index a2e920e2..2dd2ea3b 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/content.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/content.tsx @@ -1,15 +1,16 @@ import * as React from 'react'; -import { MetadataContent } from './metadata-content'; -import { CategoryContent } from './category-content'; import { PaymentTerminalPaymentMethod } from 'checkout/hooks'; -export const Content: React.FC<{ method: PaymentTerminalPaymentMethod; localeCode: string }> = ({ - method, - localeCode -}) => { +import { CategoryContent } from './category-content'; +import { MetadataContent } from './metadata-content'; + +export const Content: React.FC<{ + method: PaymentTerminalPaymentMethod; + localeCode: string; +}> = ({ method, localeCode }) => { if (method.serviceProviders.length === 1) { - return ; + return ; } if (method.serviceProviders.length > 1) { return ; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/metadata-content.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/metadata-content.tsx index 81e8af2b..05e5acef 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/metadata-content.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/content/metadata-content.tsx @@ -3,14 +3,14 @@ import * as React from 'react'; import { ServiceProvider } from 'checkout/backend'; import { getMetadata, MetadataLogo, MetadataTitle } from 'checkout/components'; -export const MetadataContent: React.FC<{ serviceProvider: ServiceProvider; localeCode: string }> = ({ - serviceProvider, - localeCode -}) => { +export const MetadataContent: React.FC<{ + serviceProvider: ServiceProvider; + localeCode: string; +}> = ({ serviceProvider, localeCode }) => { const { logo, title } = getMetadata(serviceProvider); return ( <> - {title && } + {title && } {logo && } ); diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-item.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-item.tsx index 607fb04d..9f2ab3d1 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-item.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-item.tsx @@ -1,19 +1,18 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; -import isNil from 'checkout/utils/is-nil'; +import { PaymentMethodName, ServiceProvider, ServiceProviderContactInfo } from 'checkout/backend'; +import { getMetadata, PaymentMethodItemContainer } from 'checkout/components/ui'; import { FormName, PaymentTerminalFormInfo, PaymentTerminalSelectorFormInfo, ResultFormInfo, - ResultType + ResultType, } from 'checkout/hooks'; -import { getMetadata, PaymentMethodItemContainer } from 'checkout/components/ui'; -import { PaymentMethodName, ServiceProvider, ServiceProviderContactInfo } from 'checkout/backend'; -import { Content } from './content'; import { PaymentTerminalPaymentMethod, useCreatePayment, PaymentTerminalFormValues } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; +import { Content } from './content'; import { InitialContext } from '../../../../../../initial-context'; import { ModalContext } from '../../../../../modal-context'; @@ -30,7 +29,7 @@ const isRequiredPhoneNumber = (contactInfo: ServiceProviderContactInfo, phoneNum const isRequiredPaymentTerminalForm = ( serviceProvider: ServiceProvider, emailPrefilled: boolean, - phoneNumberPrefilled: boolean + phoneNumberPrefilled: boolean, ): boolean => { const { form, contactInfo } = getMetadata(serviceProvider); return ( @@ -59,8 +58,8 @@ export const PaymentTerminalMethodItem = ({ method }: PaymentTerminalMethodItemP setFormData({ method: PaymentMethodName.PaymentTerminal, values: { - provider: serviceProvider.id - } as PaymentTerminalFormValues + provider: serviceProvider.id, + } as PaymentTerminalFormValues, }); } } @@ -78,7 +77,7 @@ export const PaymentTerminalMethodItem = ({ method }: PaymentTerminalMethodItemP return ( - + ); }; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-items.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-items.tsx index a0aa1a02..20d95cd3 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-items.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/payment-terminal-method-items/payment-terminal-method-items.tsx @@ -1,7 +1,6 @@ -import * as React from 'react'; - import { KnownProviderCategories, PaymentTerminalPaymentMethod } from 'checkout/hooks'; import { assertUnreachable } from 'checkout/utils'; + import { PaymentTerminalMethodItem } from './payment-terminal-method-item'; export interface PaymentTerminalMethodItemsProps { diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/wallets.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/wallets.tsx index 2d3770bf..a2dad425 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/wallets.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/wallets.tsx @@ -1,11 +1,10 @@ -import * as React from 'react'; import { useContext } from 'react'; +import { PaymentMethodIcon, PaymentMethodTitle } from 'checkout/components/ui'; import { FormName, WalletProvidersFormInfo } from 'checkout/hooks'; + import { Method } from './method'; import { Text } from './text'; -import { PaymentMethodIcon, PaymentMethodTitle } from 'checkout/components/ui'; - import { InitialContext } from '../../../../../initial-context'; import { ModalContext } from '../../../../modal-context'; @@ -18,7 +17,7 @@ export const Wallets = () => { }; return ( - + {locale['form.payment.method.name.wallet.label']} diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/other-payment-methods-link/other-payment-methods-link.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/other-payment-methods-link/other-payment-methods-link.tsx index 7aa8d22a..9bb0c458 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/other-payment-methods-link/other-payment-methods-link.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/other-payment-methods-link/other-payment-methods-link.tsx @@ -2,8 +2,8 @@ import * as React from 'react'; import { MouseEventHandler } from 'react'; import styled from 'styled-components'; -import { Locale } from 'checkout/locale'; import { Link } from 'checkout/components'; +import { Locale } from 'checkout/locale'; const Block = styled.div` display: flex; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx index 76925f94..664df2f6 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx @@ -1,13 +1,12 @@ -import * as React from 'react'; import { useContext, useEffect, useMemo, useState } from 'react'; +import { PaymentMethod } from 'checkout/hooks'; + import { MethodsList } from './methods'; import { OtherPaymentMethodsLink } from './other-payment-methods-link'; -import { Title } from '../title'; -import { HeaderWrapper } from '../header-wrapper'; -import { PaymentMethod } from 'checkout/hooks'; - import { InitialContext } from '../../../../initial-context'; +import { HeaderWrapper } from '../header-wrapper'; +import { Title } from '../title'; const sortByPriority = (methods: PaymentMethod[]): PaymentMethod[] => methods.sort((m1, m2) => (m1.priority > m2.priority ? 1 : -1)); @@ -32,7 +31,7 @@ export const PaymentMethods = ({ onMount }: { onMount: () => void }) => {
{visibleMethods.length < allMethods.length && ( - setIsShowAll(true)} locale={locale} /> + setIsShowAll(true)} /> )} ); diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/format-metadata-value.ts b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/format-metadata-value.ts index 483ba24f..cd183487 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/format-metadata-value.ts +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/format-metadata-value.ts @@ -21,7 +21,7 @@ export function formatMetadataValue(form: ServiceProviderMetadataField[], for ? acc : { ...acc, - [field.name]: toResultValue(field, formValue) + [field.name]: toResultValue(field, formValue), }; }, {} as T); } diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/payment-terminal-form.tsx b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/payment-terminal-form.tsx index 5376f1a0..d85f9928 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/payment-terminal-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/payment-terminal-form.tsx @@ -1,31 +1,30 @@ -import * as React from 'react'; import { useContext, useEffect, useState } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; -import { PaymentTerminalFormInfo, ResultFormInfo, ResultType, PaymentTerminalFormValues } from 'checkout/hooks'; -import { Header } from '../header'; -import { PayButton } from '../pay-button'; -import { FormGroup } from '../form-group'; import { getMetadata, MetadataField, MetadataLogo, MetadataSelect } from 'checkout/components/ui'; -import { Email, Phone } from '../common-fields'; -import { LogoContainer } from './logo-container'; -import { formatMetadataValue } from './format-metadata-value'; -import { sortByIndex } from './sort-by-index'; -import { VpaInstruction } from './vpa-instruction'; +import { PaymentTerminalFormInfo, ResultFormInfo, ResultType, PaymentTerminalFormValues } from 'checkout/hooks'; import { PaymentMethodName, useCreatePayment } from 'checkout/hooks'; -import { useActiveModalForm } from '../use-active-modal-form'; import { isEmptyObject } from 'checkout/utils/is-empty-object'; -import { useDefaultFormValues } from './use-default-form-values'; -import { Container } from './container'; +import { Container } from './container'; +import { formatMetadataValue } from './format-metadata-value'; +import { LogoContainer } from './logo-container'; +import { sortByIndex } from './sort-by-index'; +import { useDefaultFormValues } from './use-default-form-values'; +import { VpaInstruction } from './vpa-instruction'; import { InitialContext } from '../../../../initial-context'; import { ModalContext } from '../../../modal-context'; +import { Email, Phone } from '../common-fields'; +import { FormGroup } from '../form-group'; +import { Header } from '../header'; +import { PayButton } from '../pay-button'; +import { useActiveModalForm } from '../use-active-modal-form'; export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { const { locale, initConfig, - model: { serviceProviders } + model: { serviceProviders }, } = useContext(InitialContext); const { modalState, setViewInfoError, goToFormInfo, prepareToPay } = useContext(ModalContext); const { createPaymentState, setFormData } = useCreatePayment(); @@ -37,10 +36,10 @@ export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { register, handleSubmit, getValues, - formState: { errors, dirtyFields, isSubmitted, isValid } + formState: { errors, dirtyFields, isSubmitted, isValid }, } = useForm({ mode: 'onChange', - defaultValues + defaultValues, }); const [formTouched, setFormTouched] = useState(false); @@ -64,8 +63,8 @@ export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { if (createPaymentState.status === 'FAILURE') { goToFormInfo( new ResultFormInfo(ResultType.hookError, { - error: createPaymentState.error - }) + error: createPaymentState.error, + }), ); } }, [createPaymentState]); @@ -79,16 +78,16 @@ export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { paymentSessionInfo, metadata: { ...prefilledMetadataValues, - ...formatMetadataValue(form, values?.metadata) - } - } + ...formatMetadataValue(form, values?.metadata), + }, + }, }; prepareToPay(); setFormData(payload); }; return ( -
setFormTouched(true)}> + setFormTouched(true)} onSubmit={handleSubmit(onSubmit)}>
@@ -102,22 +101,22 @@ export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { {m.type === 'select' && ( )} {m.type !== 'select' && ( )} {m?.addon === 'vpa' && } @@ -126,20 +125,20 @@ export const PaymentTerminalForm = ({ onMount }: { onMount: () => void }) => { {contactInfo?.email && ( )} {contactInfo?.phoneNumber && ( )} diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/use-default-form-values.ts b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/use-default-form-values.ts index 7c13b33e..04b1e8f5 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/use-default-form-values.ts +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-form/use-default-form-values.ts @@ -1,4 +1,5 @@ import { useMemo } from 'react'; + import { ServiceProviderMetadataField, ServiceProviderMetadataForm } from 'checkout/backend'; import { InitConfig } from 'checkout/config'; import { PaymentTerminalFormValues } from 'checkout/hooks'; @@ -8,14 +9,14 @@ import isString from 'checkout/utils/is-string'; const applyReplacePattern = (rawValue: T, pattern?: string, replaceValue = ''): string | T => { if (!isNil(pattern) && isString(rawValue)) { const regExp = new RegExp(pattern, 'g'); - return rawValue.replaceAll(regExp, replaceValue); + return rawValue.replace(regExp, replaceValue); } return rawValue; }; export const prepareFormValues = ( form: ServiceProviderMetadataField[], - terminalFormValues: object + terminalFormValues: object, ): Partial => ({ metadata: form.reduce((acc, formField) => { const value = terminalFormValues[formField.name]; @@ -28,9 +29,9 @@ export const prepareFormValues = ( } return { ...acc, - [formField.name]: appliedValue + [formField.name]: appliedValue, }; - }, {}) + }, {}), }); const toDefaultFormValuesMetadata = (terminalFormValues: object, form: ServiceProviderMetadataForm) => { @@ -43,7 +44,11 @@ const toDefaultFormValues = (initConfig: InitConfig, form: ServiceProviderMetada const email = initConfig?.email; const phoneNumber = initConfig?.phoneNumber; const terminalFormValues = initConfig?.terminalFormValues; - return { email, phoneNumber, metadata: toDefaultFormValuesMetadata(terminalFormValues, form) }; + return { + email, + phoneNumber, + metadata: toDefaultFormValuesMetadata(terminalFormValues, form), + }; }; export const useDefaultFormValues = (initConfig: InitConfig, form: ServiceProviderMetadataForm) => diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/page-navigation.tsx b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/page-navigation.tsx index 131d59ae..e4d2f794 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/page-navigation.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/page-navigation.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import styled from 'styled-components'; + import { ChevronButton } from 'checkout/components'; const Flex = styled.div` diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/payment-terminal-selector-form.tsx b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/payment-terminal-selector-form.tsx index 256ada21..a8b05dd1 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/payment-terminal-selector-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/payment-terminal-selector-form.tsx @@ -1,16 +1,15 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; import styled from 'styled-components'; -import { Header } from '../header'; import { FormName, PaymentTerminalFormInfo, PaymentTerminalSelectorFormInfo } from 'checkout/hooks'; -import { Locale } from 'checkout/locale'; -import { ServiceProvidersGrid } from './service-providers-grid'; -import { getAvailableTerminalPaymentMethod } from '../get-available-terminal-payment-method'; import { KnownProviderCategories } from 'checkout/hooks'; +import { Locale } from 'checkout/locale'; -import { ModalContext } from '../../../modal-context'; +import { ServiceProvidersGrid } from './service-providers-grid'; import { InitialContext } from '../../../../initial-context'; +import { ModalContext } from '../../../modal-context'; +import { getAvailableTerminalPaymentMethod } from '../get-available-terminal-payment-method'; +import { Header } from '../header'; import { useActiveModalForm } from '../use-active-modal-form'; const Container = styled.div` diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-provider-pane.tsx b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-provider-pane.tsx index 2d40b8c4..0edfae17 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-provider-pane.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-provider-pane.tsx @@ -49,10 +49,10 @@ const PaneLogo: React.FC<{ logo: ServiceProviderIconMetadata }> = ({ logo }) => ); -export const ServiceProviderPane: React.FC<{ serviceProvider: ServiceProvider; onClick: (id: string) => void }> = ({ - serviceProvider, - onClick -}) => { +export const ServiceProviderPane: React.FC<{ + serviceProvider: ServiceProvider; + onClick: (id: string) => void; +}> = ({ serviceProvider, onClick }) => { const { logo } = getMetadata(serviceProvider); return ( onClick(serviceProvider.id)}> diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-providers-grid.tsx b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-providers-grid.tsx index 04f3a53c..b696ca79 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-providers-grid.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/service-providers-grid.tsx @@ -1,10 +1,12 @@ import * as React from 'react'; -import styled from 'styled-components'; -import { ServiceProvider } from 'checkout/backend'; -import { ServiceProviderPane } from './service-provider-pane'; import { useCallback, useContext, useMemo } from 'react'; -import { PageNavigation } from './page-navigation'; +import styled from 'styled-components'; + +import { ServiceProvider } from 'checkout/backend'; import { Input } from 'checkout/components'; + +import { PageNavigation } from './page-navigation'; +import { ServiceProviderPane } from './service-provider-pane'; import { useGridPages } from './use-grid-pages'; import { InitialContext } from '../../../../initial-context'; @@ -38,7 +40,7 @@ export const ServiceProvidersGrid: React.FC = ({ serv const { locale } = useContext(InitialContext); const [{ totalPages, page, isNext, isPrevious, pageItems }, { next, previous, filter }] = useGridPages( serviceProviders, - ITEMS_ON_PAGE + ITEMS_ON_PAGE, ); const onChange = useCallback((e) => { @@ -60,12 +62,12 @@ export const ServiceProvidersGrid: React.FC = ({ serv {totalPages > 1 && ( )} diff --git a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/use-grid-pages.ts b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/use-grid-pages.ts index 72db7912..1fd9e642 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/use-grid-pages.ts +++ b/src/app/components/app/modal-container/modal/form-container/payment-terminal-selector-form/use-grid-pages.ts @@ -1,6 +1,7 @@ -import { ServiceProvider } from 'checkout/backend'; import { useCallback, useReducer } from 'react'; +import { ServiceProvider } from 'checkout/backend'; + type ServiceProviderPage = { items: ServiceProvider[]; }; @@ -19,8 +20,8 @@ const toPages = (serviceProviders: ServiceProvider[], itemsOnPage: number): Serv result = [ ...result, { - items: sliced - } + items: sliced, + }, ]; } } while (isMorePages); @@ -56,7 +57,7 @@ const initPages = (serviceProviders: ServiceProvider[], itemsOnPage: number): St page: 1, totalPages: pages.length, serviceProviders, - itemsOnPage + itemsOnPage, }; }; @@ -71,7 +72,7 @@ const next = (state: State): State => { pageItems: state.pages[currPageIndex].items, isPrevious: true, isNext: state.pages.length > state.page + 1, - page: state.page + 1 + page: state.page + 1, }; }; @@ -87,12 +88,14 @@ const previous = (state: State): State => { pageItems: state.pages[currPageIndex].items, isPrevious: currPage !== 1, isNext: true, - page: currPage + page: currPage, }; }; -const byBrandName = (filterStr: string) => ({ brandName }: ServiceProvider) => - brandName.toLowerCase().includes(filterStr.toLowerCase()); +const byBrandName = + (filterStr: string) => + ({ brandName }: ServiceProvider) => + brandName.toLowerCase().includes(filterStr.toLowerCase()); const filterPages = (state: State, filterStr: string): State => { let filtered = state.serviceProviders.concat(); @@ -102,7 +105,7 @@ const filterPages = (state: State, filterStr: string): State => { return { ...state, ...initPages(filtered, state.itemsOnPage), - serviceProviders: state.serviceProviders.concat() + serviceProviders: state.serviceProviders.concat(), }; }; @@ -119,14 +122,14 @@ const gridPagesReducer = (state: State, action: Action): State => { export const useGridPages = ( serviceProviders: ServiceProvider[], - itemsOnPage: number + itemsOnPage: number, ): [ State, { next: () => void; previous: () => void; filter: (str: string) => void; - } + }, ] => { const [state, dispatch] = useReducer(gridPagesReducer, initPages(serviceProviders, itemsOnPage)); @@ -142,10 +145,10 @@ export const useGridPages = ( (filterStr: string) => { dispatch({ type: 'FILTER_PAGES', - payload: filterStr + payload: filterStr, }); }, - [serviceProviders] + [serviceProviders], ); return [ @@ -153,7 +156,7 @@ export const useGridPages = ( { next, previous, - filter - } + filter, + }, ]; }; diff --git a/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code-interaction-form.tsx b/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code-interaction-form.tsx index 34226f97..29f66a70 100644 --- a/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code-interaction-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code-interaction-form.tsx @@ -1,17 +1,16 @@ -import * as React from 'react'; +import isMobile from 'ismobilejs'; import { useContext, useEffect, useRef } from 'react'; import styled from 'styled-components'; -import isMobile from 'ismobilejs'; + +import { QrCodeFormMetadata } from 'checkout/backend'; +import { Button, CopyToClipboardButton, getMetadata, Hr, Input } from 'checkout/components/ui'; +import { QrCodeInteractionFormInfo } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; import { QRCode } from './qr-code'; -import { QrCodeInteractionFormInfo } from 'checkout/hooks'; -import { Button, CopyToClipboardButton, getMetadata, Hr, Input } from 'checkout/components/ui'; -import { QrCodeFormMetadata } from 'checkout/backend'; -import isNil from 'checkout/utils/is-nil'; -import { useActiveModalForm } from '../use-active-modal-form'; - import { InitialContext } from '../../../../initial-context'; import { ModalContext } from '../../../modal-context'; +import { useActiveModalForm } from '../use-active-modal-form'; const Instruction = styled.p` font-weight: 500; @@ -37,7 +36,7 @@ export const QrCodeInteractionForm = ({ onMount }: { onMount: () => void }) => { const { locale, initConfig, - model: { serviceProviders } + model: { serviceProviders }, } = useContext(InitialContext); const { modalState } = useContext(ModalContext); const { request, providerID } = useActiveModalForm(modalState); @@ -61,10 +60,11 @@ export const QrCodeInteractionForm = ({ onMount }: { onMount: () => void }) => { {qrCodeForm.isCopyCodeBlock && ( <> + id="qr-code-input" + readOnly={true} + > copyToClipboard()} />
@@ -76,7 +76,8 @@ export const QrCodeInteractionForm = ({ onMount }: { onMount: () => void }) => {
diff --git a/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code.tsx b/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code.tsx index 6412a9cb..ac918861 100644 --- a/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code.tsx +++ b/src/app/components/app/modal-container/modal/form-container/qr-code-interaction-form/qr-code.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import kjua from 'kjua'; +import * as React from 'react'; import styled from 'styled-components'; const Container = styled.div` @@ -18,8 +18,8 @@ export const QRCode: React.FC<{ text: string }> = ({ text }) => ( ecLevel: 'H', quiet: 0, mode: 'plain', - text - }).outerHTML + text, + }).outerHTML, }} /> ); diff --git a/src/app/components/app/modal-container/modal/form-container/redirect-form/redirect-form.tsx b/src/app/components/app/modal-container/modal/form-container/redirect-form/redirect-form.tsx index f1d83b8c..c9e2b745 100644 --- a/src/app/components/app/modal-container/modal/form-container/redirect-form/redirect-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/redirect-form/redirect-form.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import { useContext, useEffect, useRef, useState } from 'react'; import styled from 'styled-components'; diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx index 2b75cce6..58c7a73c 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx @@ -1,12 +1,11 @@ -import * as React from 'react'; import { useContext, useMemo } from 'react'; import styled from 'styled-components'; import { Button } from 'checkout/components'; -import { Locale } from 'checkout/locale'; -import { FormInfo, FormName, ModalForms, ModalName, PaymentStatus } from 'checkout/hooks'; -import { findNamed } from 'checkout/utils'; import { Link } from 'checkout/components/ui/link'; +import { FormInfo, FormName, ModalForms, ModalName, PaymentStatus } from 'checkout/hooks'; +import { Locale } from 'checkout/locale'; +import { findNamed } from 'checkout/utils'; import { InitialContext } from '../../../../initial-context'; import { ModalContext } from '../../../modal-context'; @@ -53,7 +52,7 @@ export const ActionBlock = () => { const info = (findNamed(modalState, ModalName.modalForms) as ModalForms).formsInfo; return { startedInfo: info.find((item) => item.paymentStatus === PaymentStatus.started), - hasMultiMethods: !!findNamed(info, FormName.paymentMethods) + hasMultiMethods: !!findNamed(info, FormName.paymentMethods), }; }, [modalState]); @@ -66,7 +65,7 @@ export const ActionBlock = () => { {!initConfig.isExternalIDIncluded && ( <> {payOtherCapability(startedInfo) && ( - )} diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/get-failed-description.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/get-failed-description.tsx index 5ea24030..8d91a44a 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/get-failed-description.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/get-failed-description.tsx @@ -1,5 +1,5 @@ -import { Locale } from 'checkout/locale'; import { LogicError } from 'checkout/backend'; +import { Locale } from 'checkout/locale'; const getDescription = (l: Locale, e: LogicError): string => { const result = l[e.code] ? l[e.code] : e.code; diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-error.ts b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-error.ts index 01e79e1e..aeb78efb 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-error.ts +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-error.ts @@ -1,6 +1,7 @@ -import { Locale } from 'checkout/locale'; -import { failed } from './make-from-payment-change'; import { PaymentError } from 'checkout/backend'; +import { Locale } from 'checkout/locale'; + +import { failed } from './make-from-payment-change'; import { ResultFormContent } from './result-form-content'; export const makeContentError = (l: Locale, error: PaymentError): ResultFormContent => failed(l, error); diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-invoice.ts b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-invoice.ts index 94be7054..465ce853 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-invoice.ts +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-content-invoice.ts @@ -1,9 +1,10 @@ import { InvoiceChangeType, InvoiceChange, InvoiceStatusChanged, PaymentStatusChanged } from 'checkout/backend'; import { Locale } from 'checkout/locale'; -import { ResultFormContent } from './result-form-content'; + import { makeFromInvoiceChangeHook } from './make-from-invoice-change'; import { makeFromPaymentChangeHook } from './make-from-payment-change'; import { makeFromPaymentStarted } from './make-from-payment-started'; +import { ResultFormContent } from './result-form-content'; export const makeContentInvoiceHook = (l: Locale, change: InvoiceChange): ResultFormContent => { switch (change.changeType) { diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-invoice-change.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-invoice-change.tsx index 8e018ed5..113c5b05 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-invoice-change.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-invoice-change.tsx @@ -1,41 +1,42 @@ import { InvoiceEvent, InvoiceStatusChanged, InvoiceStatuses, LogicError, LogicErrorCode } from 'checkout/backend'; import { Locale } from 'checkout/locale'; -import { ResultFormContent, ResultFormType } from './result-form-content'; import { getLastChange } from 'checkout/utils'; +import { ResultFormContent, ResultFormType } from './result-form-content'; + const refunded = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: false, header: l['form.header.final.invoice.refunded.label'], - type: ResultFormType.WARNING + type: ResultFormType.WARNING, }); const alreadyPaid = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: false, header: l['form.header.final.invoice.paid.already.label'], - type: ResultFormType.SUCCESS + type: ResultFormType.SUCCESS, }); const paid = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: true, header: l['form.header.final.invoice.paid.label'], - type: ResultFormType.SUCCESS + type: ResultFormType.SUCCESS, }); const cancelled = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: false, header: l['form.header.final.invoice.cancelled.label'], - type: ResultFormType.ERROR + type: ResultFormType.ERROR, }); const fulfilled = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: false, header: l['form.header.final.invoice.fulfilled.label'], - type: ResultFormType.SUCCESS + type: ResultFormType.SUCCESS, }); export const makeFromInvoiceChange = (l: Locale, e: InvoiceEvent[], error: LogicError) => { diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-change.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-change.tsx index 6c98261f..8e5f73dd 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-change.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-change.tsx @@ -1,30 +1,31 @@ -import { Locale } from 'checkout/locale'; import { InvoiceEvent, LogicError, PaymentError, PaymentStatusChanged, PaymentStatuses } from 'checkout/backend'; -import { ResultFormContent } from './result-form-content'; -import { getFailedDescription } from './get-failed-description'; +import { Locale } from 'checkout/locale'; import { getLastChange } from 'checkout/utils'; -import { ResultFormType } from './result-form-content'; import isObject from 'checkout/utils/is-object'; +import { getFailedDescription } from './get-failed-description'; +import { ResultFormContent } from './result-form-content'; +import { ResultFormType } from './result-form-content'; + export const refunded = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: true, header: l['form.header.final.refunded.label'], - type: ResultFormType.WARNING + type: ResultFormType.WARNING, }); export const pending = (l: Locale): ResultFormContent => ({ hasActions: true, hasDone: false, header: l['form.header.final.pending.label'], - type: ResultFormType.WARNING + type: ResultFormType.WARNING, }); export const cancelled = (l: Locale): ResultFormContent => ({ hasActions: true, hasDone: false, header: l['form.header.final.cancelled.label'], - type: ResultFormType.WARNING + type: ResultFormType.WARNING, }); export const failed = (l: Locale, e: PaymentError | LogicError): ResultFormContent => ({ @@ -32,7 +33,7 @@ export const failed = (l: Locale, e: PaymentError | LogicError): ResultFormConte hasDone: false, header: l['form.header.final.failed.label'], description: getFailedDescription(l, e), - type: ResultFormType.ERROR + type: ResultFormType.ERROR, }); const getErrorDescription = (error: unknown): string => { @@ -49,14 +50,14 @@ export const failedHook = (l: Locale, error: unknown): ResultFormContent => ({ hasDone: false, header: l['form.header.final.failed.label'], description: getErrorDescription(error), - type: ResultFormType.ERROR + type: ResultFormType.ERROR, }); const processed = (l: Locale): ResultFormContent => ({ hasActions: false, hasDone: true, header: l['form.header.final.success.label'], - type: ResultFormType.SUCCESS + type: ResultFormType.SUCCESS, }); export const makeFromPaymentChange = (l: Locale, e: InvoiceEvent[]) => { diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-started.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-started.tsx index eab7fa46..a924bd23 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-started.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/make-from-payment-started.tsx @@ -1,4 +1,5 @@ import { Locale } from 'checkout/locale'; + import { ResultFormContent, ResultFormType } from './result-form-content'; const started = (l: Locale): ResultFormContent => ({ @@ -6,7 +7,7 @@ const started = (l: Locale): ResultFormContent => ({ hasDone: false, header: l['form.header.final.started.label'], description: l['form.final.started.pay.text'], - type: ResultFormType.WARNING + type: ResultFormType.WARNING, }); export const makeFromPaymentStarted = (l: Locale): ResultFormContent => started(l); diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/result-form-content.ts b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/result-form-content.ts index 91332d05..75485cfb 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/make-content/result-form-content.ts +++ b/src/app/components/app/modal-container/modal/form-container/result-form/make-content/result-form-content.ts @@ -1,7 +1,7 @@ export enum ResultFormType { ERROR = 'error', WARNING = 'warning', - SUCCESS = 'success' + SUCCESS = 'success', } export interface ResultFormContent { diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx index f9a456e8..749f12d8 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx @@ -1,16 +1,15 @@ -import * as React from 'react'; import { useContext, useEffect, useMemo } from 'react'; import styled, { css } from 'styled-components'; import { FormName, ModalForms, ModalName, ResultFormInfo, ResultType } from 'checkout/hooks'; +import { device } from 'checkout/utils/device'; +import { findNamed } from 'checkout/utils/find-named'; +import isNil from 'checkout/utils/is-nil'; + +import { ActionBlock } from './action-block'; import { ResultFormType, makeContentInvoiceHook } from './make-content'; import { failedHook, pending } from './make-content/make-from-payment-change'; -import { ActionBlock } from './action-block'; import { ResultIcon } from './result-icons'; -import { device } from 'checkout/utils/device'; -import isNil from 'checkout/utils/is-nil'; -import { findNamed } from 'checkout/utils/find-named'; - import { InitialContext } from '../../../../initial-context'; import { ResultContext } from '../../../../result-context'; import { ModalContext } from '../../../modal-context'; @@ -77,7 +76,7 @@ export const ResultForm = ({ onMount }: { onMount: () => void }) => { hasActions: false, hasDone: false, header: '', - description: '' + description: '', }; } switch (resultFormInfo.resultType) { diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/result-icons/error-icon/error-icon.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/result-icons/error-icon/error-icon.tsx index dbc154f9..2a000c21 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/result-icons/error-icon/error-icon.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/result-icons/error-icon/error-icon.tsx @@ -1,9 +1,10 @@ import * as React from 'react'; import { withTheme } from 'styled-components'; + import { WithThemeProps } from 'checkout/themes'; const ErrorIconDef: React.FC = ({ theme }) => ( - + = ({ theme }) => ( - + = ({ theme }) => ( - + - - + + ); diff --git a/src/app/components/app/modal-container/modal/form-container/wallet-form/sign-up.tsx b/src/app/components/app/modal-container/modal/form-container/wallet-form/sign-up.tsx index dfa5af7e..87109abc 100644 --- a/src/app/components/app/modal-container/modal/form-container/wallet-form/sign-up.tsx +++ b/src/app/components/app/modal-container/modal/form-container/wallet-form/sign-up.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import styled from 'styled-components'; + import { Locale } from 'checkout/locale'; const SignUpText = styled.p` diff --git a/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx b/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx index 83e8a743..deb19c5f 100644 --- a/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx @@ -1,20 +1,19 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; -import { FormGroup } from '../form-group'; -import { ResultFormInfo, ResultType, WalletFormInfo, WalletFormValues } from 'checkout/hooks'; -import { PayButton } from '../pay-button'; -import { Header } from '../header'; -import { SignUp } from './sign-up'; import { getMetadata, MetadataField, MetadataLogo, obscurePassword, sortByIndex } from 'checkout/components/ui'; -import { LogoContainer } from './logo-container'; +import { ResultFormInfo, ResultType, WalletFormInfo, WalletFormValues } from 'checkout/hooks'; import { PaymentMethodName, useCreatePayment } from 'checkout/hooks'; -import { useActiveModalForm } from '../use-active-modal-form'; import { isEmptyObject } from 'checkout/utils/is-empty-object'; +import { LogoContainer } from './logo-container'; +import { SignUp } from './sign-up'; import { InitialContext } from '../../../../initial-context'; import { ModalContext } from '../../../modal-context'; +import { FormGroup } from '../form-group'; +import { Header } from '../header'; +import { PayButton } from '../pay-button'; +import { useActiveModalForm } from '../use-active-modal-form'; export const WalletForm = ({ onMount }: { onMount: () => void }) => { const { locale, initConfig } = useContext(InitialContext); @@ -25,9 +24,9 @@ export const WalletForm = ({ onMount }: { onMount: () => void }) => { const { register, handleSubmit, - formState: { errors, dirtyFields, isSubmitted } + formState: { errors, dirtyFields, isSubmitted }, } = useForm({ - mode: 'onChange' + mode: 'onChange', }); useEffect(() => { @@ -44,8 +43,8 @@ export const WalletForm = ({ onMount }: { onMount: () => void }) => { if (createPaymentState.status === 'FAILURE') { goToFormInfo( new ResultFormInfo(ResultType.hookError, { - error: createPaymentState.error - }) + error: createPaymentState.error, + }), ); } }, [createPaymentState]); @@ -56,8 +55,8 @@ export const WalletForm = ({ onMount }: { onMount: () => void }) => { method: PaymentMethodName.DigitalWallet, values: { provider: activeProvider?.id, - ...(form ? obscurePassword(form, values) : values) - } + ...(form ? obscurePassword(form, values) : values), + }, }); }; @@ -74,16 +73,16 @@ export const WalletForm = ({ onMount }: { onMount: () => void }) => { {form?.sort(sortByIndex).map((m) => ( ))} - {signUpLink && } + {signUpLink && } )} diff --git a/src/app/components/app/modal-container/modal/form-container/wallet-provider-payment-method-item/wallet-provider-payment-method-item.tsx b/src/app/components/app/modal-container/modal/form-container/wallet-provider-payment-method-item/wallet-provider-payment-method-item.tsx index 61d84177..f20934c9 100644 --- a/src/app/components/app/modal-container/modal/form-container/wallet-provider-payment-method-item/wallet-provider-payment-method-item.tsx +++ b/src/app/components/app/modal-container/modal/form-container/wallet-provider-payment-method-item/wallet-provider-payment-method-item.tsx @@ -1,11 +1,11 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; -import { FormInfo, FormName, ResultFormInfo, ResultType, WalletFormInfo } from 'checkout/hooks'; -import { getMetadata, MetadataLogo, PaymentMethodItemContainer } from 'checkout/components/ui'; import { PaymentMethodName, ServiceProvider } from 'checkout/backend'; -import isNil from 'checkout/utils/is-nil'; +import { getMetadata, MetadataLogo, PaymentMethodItemContainer } from 'checkout/components/ui'; +import { FormInfo, FormName, ResultFormInfo, ResultType, WalletFormInfo } from 'checkout/hooks'; import { PaymentTerminalFormValues, useCreatePayment } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; + import { ModalContext } from '../../../modal-context'; export type SetFormInfoAction = (formInfo: FormInfo) => any; @@ -25,8 +25,8 @@ export const WalletProviderPaymentMethodItem = ({ serviceProvider }: WalletProvi setFormData({ method: PaymentMethodName.PaymentTerminal, values: { - provider: serviceProvider.id - } as PaymentTerminalFormValues + provider: serviceProvider.id, + } as PaymentTerminalFormValues, }); } else { goToFormInfo(new WalletFormInfo(serviceProvider, FormName.walletProviders)); diff --git a/src/app/components/app/modal-container/modal/form-container/wallet-providers/wallet-providers.tsx b/src/app/components/app/modal-container/modal/form-container/wallet-providers/wallet-providers.tsx index 2b39c748..87c00eae 100644 --- a/src/app/components/app/modal-container/modal/form-container/wallet-providers/wallet-providers.tsx +++ b/src/app/components/app/modal-container/modal/form-container/wallet-providers/wallet-providers.tsx @@ -1,14 +1,14 @@ -import * as React from 'react'; import { useContext, useEffect } from 'react'; +import { DigitalWalletPaymentMethod, PaymentMethodName } from 'checkout/hooks'; + +import { InitialContext } from '../../../../initial-context'; import { Header } from '../header'; import { WalletProviderPaymentMethodItem } from '../wallet-provider-payment-method-item'; -import { InitialContext } from '../../../../initial-context'; -import { DigitalWalletPaymentMethod, PaymentMethodName } from 'checkout/hooks'; const getAvailablePaymentMethod = ( availablePaymentMethods, - methodName: PaymentMethodName + methodName: PaymentMethodName, ): DigitalWalletPaymentMethod => availablePaymentMethods.find((m) => m.name === methodName); export const WalletProviders = ({ onMount }: { onMount: () => void }) => { diff --git a/src/app/components/app/modal-container/modal/info/info.tsx b/src/app/components/app/modal-container/modal/info/info.tsx index f0f4e279..bbdb4d43 100644 --- a/src/app/components/app/modal-container/modal/info/info.tsx +++ b/src/app/components/app/modal-container/modal/info/info.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import { useContext, useMemo } from 'react'; import styled from 'styled-components'; diff --git a/src/app/components/app/modal-container/modal/modal.tsx b/src/app/components/app/modal-container/modal/modal.tsx index 2e82fb81..34d47daa 100644 --- a/src/app/components/app/modal-container/modal/modal.tsx +++ b/src/app/components/app/modal-container/modal/modal.tsx @@ -1,9 +1,7 @@ -import * as React from 'react'; - -import { Info } from './info'; -import { FormContainer } from './form-container'; -import { FormBlock } from './form-block'; import { Footer } from './footer'; +import { FormBlock } from './form-block'; +import { FormContainer } from './form-container'; +import { Info } from './info'; export const Modal = () => ( <> diff --git a/src/app/components/app/modal-container/payable-invoice-context.ts b/src/app/components/app/modal-container/payable-invoice-context.ts index d4940f9c..7dafbbad 100644 --- a/src/app/components/app/modal-container/payable-invoice-context.ts +++ b/src/app/components/app/modal-container/payable-invoice-context.ts @@ -1,4 +1,5 @@ import { createContext } from 'react'; + import { PayableInvoiceData } from 'checkout/hooks'; export const PayableInvoiceContext = createContext<{ diff --git a/src/app/components/app/modal-container/use-interaction-model.ts b/src/app/components/app/modal-container/use-interaction-model.ts index 65e065f9..f6281c28 100644 --- a/src/app/components/app/modal-container/use-interaction-model.ts +++ b/src/app/components/app/modal-container/use-interaction-model.ts @@ -1,8 +1,8 @@ import { useEffect, useState } from 'react'; import { InvoiceChange, PaymentInteractionRequested, PaymentResourcePayer, PaymentStarted } from 'checkout/backend'; -import isNil from 'checkout/utils/is-nil'; import { InteractionModel } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; export const useInteractionModel = () => { const [paymentInteraction, setPaymentInteraction] = useState(null); diff --git a/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx b/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx index fdf25113..5c8806a2 100644 --- a/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx +++ b/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx @@ -1,15 +1,14 @@ -import * as React from 'react'; import { useContext, useEffect, useMemo, useRef } from 'react'; +import styled from 'styled-components'; import { EventInteractionObject, ModalInteraction, ModalInteractionType, ModalName, - TokenizedInteractionObject + TokenizedInteractionObject, } from 'checkout/hooks'; import { findNamed, prepareForm } from 'checkout/utils'; -import styled from 'styled-components'; import { device } from 'checkout/utils/device'; import { InitialContext } from '../../initial-context'; @@ -73,7 +72,7 @@ export const UserInteractionModal = () => { return ( - + ); }; diff --git a/src/app/components/app/modal-error.tsx b/src/app/components/app/modal-error.tsx index 7b9ecf0b..39a1221c 100644 --- a/src/app/components/app/modal-error.tsx +++ b/src/app/components/app/modal-error.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { useMemo } from 'react'; import styled from 'styled-components'; + import { device } from 'checkout/utils/device'; const ModalErrorWrapper = styled.div` diff --git a/src/app/components/app/overlay.tsx b/src/app/components/app/overlay.tsx index 19364735..7475afb1 100644 --- a/src/app/components/app/overlay.tsx +++ b/src/app/components/app/overlay.tsx @@ -1,6 +1,4 @@ -import * as React from 'react'; import { motion } from 'framer-motion'; - import styled, { css } from 'styled-components'; const OverlayBg = styled.div` @@ -20,7 +18,7 @@ const OverlayBg = styled.div` `; export const Overlay = () => ( - + ); diff --git a/src/app/components/ui/card-type-icon.tsx b/src/app/components/ui/card-type-icon.tsx index 1783823e..5582f9ed 100644 --- a/src/app/components/ui/card-type-icon.tsx +++ b/src/app/components/ui/card-type-icon.tsx @@ -1,12 +1,12 @@ -import * as React from 'react'; import { number } from 'card-validator'; +import * as React from 'react'; import styled, { keyframes } from 'styled-components'; +import { ReactComponent as Maestro } from './icon/card/maestro.svg'; +import { ReactComponent as Mastercard } from './icon/card/mastercard.svg'; import { ReactComponent as Mir } from './icon/card/mir.svg'; import { ReactComponent as Unionpay } from './icon/card/unionpay.svg'; import { ReactComponent as Visa } from './icon/card/visa.svg'; -import { ReactComponent as Mastercard } from './icon/card/mastercard.svg'; -import { ReactComponent as Maestro } from './icon/card/maestro.svg'; const growth = keyframes` from { diff --git a/src/app/components/ui/chevron-button/chevron-button.tsx b/src/app/components/ui/chevron-button/chevron-button.tsx index 020241ab..784322ae 100644 --- a/src/app/components/ui/chevron-button/chevron-button.tsx +++ b/src/app/components/ui/chevron-button/chevron-button.tsx @@ -38,7 +38,7 @@ export type ChevronButtonProps = { }; export const ChevronButton: React.FC = ({ id, onClick, type, disabled }) => ( -
diff --git a/src/app/components/ui/select/select.tsx b/src/app/components/ui/select/select.tsx index d7586558..d358dce5 100644 --- a/src/app/components/ui/select/select.tsx +++ b/src/app/components/ui/select/select.tsx @@ -49,3 +49,5 @@ export const Select = forwardRef(({ children, er {!error && dirty && } )); + +Select.displayName = 'Select'; diff --git a/src/app/config/config-resolver/resolve-boolean.ts b/src/app/config/config-resolver/resolve-boolean.ts index 01cd7072..3c5be399 100644 --- a/src/app/config/config-resolver/resolve-boolean.ts +++ b/src/app/config/config-resolver/resolve-boolean.ts @@ -1,5 +1,6 @@ import isBoolean from 'checkout/utils/is-boolean'; import isString from 'checkout/utils/is-string'; + import { getMessageInvalidValue } from '../../log-messages'; const toBoolean = (str: string): boolean => { diff --git a/src/app/config/config-resolver/resolve-init-config.spec.ts b/src/app/config/config-resolver/resolve-init-config.spec.ts index 8697b672..679a4402 100644 --- a/src/app/config/config-resolver/resolve-init-config.spec.ts +++ b/src/app/config/config-resolver/resolve-init-config.spec.ts @@ -1,6 +1,7 @@ -import { resolveInitConfig } from './resolve-init-config'; import { HoldExpirationType } from 'checkout/backend'; +import { resolveInitConfig } from './resolve-init-config'; + it('should return resolved init config', () => { const param = { invoiceID: 'someID', @@ -12,7 +13,7 @@ it('should return resolved init config', () => { description: 'some description', email: 'test@test.com', redirectUrl: 'some url', - theme: 'main' + theme: 'main', }; const actual = resolveInitConfig(param as any); @@ -33,7 +34,6 @@ it('should return resolved init config', () => { amount: 1000, email: 'test@test.com', description: 'some description', - // @ts-ignore metadata: undefined, name: 'some name', netBanking: true, @@ -45,7 +45,7 @@ it('should return resolved init config', () => { terminalBankCard: true, terminalFormValues: undefined, terminalWallets: true, - upi: true + upi: true, }; expect(actual).toEqual(expected); }); diff --git a/src/app/config/config-resolver/resolve-init-config.ts b/src/app/config/config-resolver/resolve-init-config.ts index e41b5b02..55ce0e72 100644 --- a/src/app/config/config-resolver/resolve-init-config.ts +++ b/src/app/config/config-resolver/resolve-init-config.ts @@ -1,14 +1,15 @@ -import { resolveBoolean } from './resolve-boolean'; -import { resolveInteger } from './resolve-integer'; -import { InitConfig } from '../init-config'; -import { resolveIntegrationType } from './resolve-integration-type'; -import { resolveString } from './resolve-string'; import { HoldExpirationType } from 'checkout/backend/model'; -import { resolveObject } from './resolve-object'; -import { detectLocale } from '../../../locale'; -import { resolveRedirectUrl } from './resolve-redirect-url'; + +import { resolveBoolean } from './resolve-boolean'; import { resolveEmail } from './resolve-email'; +import { resolveInteger } from './resolve-integer'; +import { resolveIntegrationType } from './resolve-integration-type'; +import { resolveObject } from './resolve-object'; import { resolvePhoneNumber } from './resolve-phone-number'; +import { resolveRedirectUrl } from './resolve-redirect-url'; +import { resolveString } from './resolve-string'; +import { detectLocale } from '../../../locale'; +import { InitConfig } from '../init-config'; const setDefault = (userParam: P, defaultValue: D): P | D => userParam === null || userParam === undefined ? defaultValue : userParam; @@ -16,7 +17,7 @@ const setDefault = (userParam: P, defaultValue: D): P | D => const checkUnknown = (resolvedParams: object, allParams: object): void => { const resolvedParamsKeys = Object.keys(resolvedParams); const unknownParams = Object.keys(allParams).filter( - (param) => resolvedParamsKeys.findIndex((v) => v === param) === -1 + (param) => resolvedParamsKeys.findIndex((v) => v === param) === -1, ); if (unknownParams.length) { console.warn(`Unknown params: ${unknownParams.join(', ')}`); @@ -41,7 +42,6 @@ export const resolveInitConfig = (userConfig: Partial): InitConfig = holdExpiration, locale, recurring, - theme, brandless, metadata, terminalFormValues, @@ -71,7 +71,7 @@ export const resolveInitConfig = (userConfig: Partial): InitConfig = paymentFlowHold: setDefault(resolveBoolean(paymentFlowHold, 'paymentFlowHold'), false), holdExpiration: setDefault( resolveString(holdExpiration, 'holdExpiration') as HoldExpirationType, - HoldExpirationType.cancel + HoldExpirationType.cancel, ), locale: detectLocale(resolveString(locale, 'locale')), recurring: setDefault(resolveBoolean(recurring, 'recurring'), false), @@ -87,6 +87,6 @@ export const resolveInitConfig = (userConfig: Partial): InitConfig = terminalWallets: setDefault(resolveBoolean(terminalWallets, 'terminalWallets'), true), pix: setDefault(resolveBoolean(pix, 'pix'), true), skipUserInteraction: setDefault(resolveBoolean(skipUserInteraction, 'skipUserInteraction'), false), - isExternalIDIncluded: setDefault(resolveBoolean(isExternalIDIncluded, 'isExternalIDIncluded'), false) + isExternalIDIncluded: setDefault(resolveBoolean(isExternalIDIncluded, 'isExternalIDIncluded'), false), }; }; diff --git a/src/app/config/config-resolver/resolve-integer.spec.ts b/src/app/config/config-resolver/resolve-integer.spec.ts index 5a025e8a..8bcdf3f9 100644 --- a/src/app/config/config-resolver/resolve-integer.spec.ts +++ b/src/app/config/config-resolver/resolve-integer.spec.ts @@ -1,6 +1,7 @@ -import { resolveInteger } from './resolve-integer'; import { getMessageInvalidValue } from 'checkout/log-messages'; +import { resolveInteger } from './resolve-integer'; + jest.mock('../../log-messages'); const getMessageInvalidValueMock = getMessageInvalidValue as any; diff --git a/src/app/config/config-resolver/resolve-integer.ts b/src/app/config/config-resolver/resolve-integer.ts index 42593465..10ef607d 100644 --- a/src/app/config/config-resolver/resolve-integer.ts +++ b/src/app/config/config-resolver/resolve-integer.ts @@ -1,6 +1,7 @@ -import toNumber from 'checkout/utils/to-number'; import isNumber from 'checkout/utils/is-number'; import isString from 'checkout/utils/is-string'; +import toNumber from 'checkout/utils/to-number'; + import { getMessageInvalidValue } from '../../log-messages'; const getFromNumber = (userInteger: number): number | null => (Number.isInteger(userInteger) ? userInteger : undefined); diff --git a/src/app/config/config-resolver/resolve-integration-type.spec.ts b/src/app/config/config-resolver/resolve-integration-type.spec.ts index 32820eb1..a3fea4c0 100644 --- a/src/app/config/config-resolver/resolve-integration-type.spec.ts +++ b/src/app/config/config-resolver/resolve-integration-type.spec.ts @@ -7,7 +7,7 @@ it('empty config should return null', () => { it('wrong config should return null', () => { const result = resolveIntegrationType({ - wrongField: 'some value' + wrongField: 'some value', } as any); expect(result).toEqual(null); }); @@ -16,12 +16,12 @@ it('should return invoice integration type', () => { const result = resolveIntegrationType({ invoiceID: 'mock invoiceID', invoiceAccessToken: 'mock token', - someField: 'someValue' + someField: 'someValue', } as any); const expected = { integrationType: 'invoice', invoiceID: 'mock invoiceID', - invoiceAccessToken: 'mock token' + invoiceAccessToken: 'mock token', }; expect(result).toEqual(expected); }); @@ -30,12 +30,12 @@ it('should return invoiceTemplate integration type', () => { const result = resolveIntegrationType({ invoiceTemplateID: 'mock invoiceTemplateID', invoiceTemplateAccessToken: 'mock token', - someField: 'someValue' + someField: 'someValue', } as any); const expected = { integrationType: 'invoiceTemplate', invoiceTemplateID: 'mock invoiceTemplateID', - invoiceTemplateAccessToken: 'mock token' + invoiceTemplateAccessToken: 'mock token', }; expect(result).toEqual(expected); }); diff --git a/src/app/config/config-resolver/resolve-integration-type.ts b/src/app/config/config-resolver/resolve-integration-type.ts index 7d71a0ce..71bab95f 100644 --- a/src/app/config/config-resolver/resolve-integration-type.ts +++ b/src/app/config/config-resolver/resolve-integration-type.ts @@ -1,15 +1,19 @@ import intersection from 'checkout/utils/intersection'; + import { InitConfig } from '../init-config'; -const typesDef: { type: 'invoiceTemplate' | 'invoice'; requiredFields: string[] }[] = [ +const typesDef: { + type: 'invoiceTemplate' | 'invoice'; + requiredFields: string[]; +}[] = [ { type: 'invoiceTemplate', - requiredFields: ['invoiceTemplateID', 'invoiceTemplateAccessToken'] + requiredFields: ['invoiceTemplateID', 'invoiceTemplateAccessToken'], }, { type: 'invoice', - requiredFields: ['invoiceID', 'invoiceAccessToken'] - } + requiredFields: ['invoiceID', 'invoiceAccessToken'], + }, ]; export const resolveIntegrationType = (userConfig: InitConfig): InitConfig => { @@ -24,8 +28,8 @@ export const resolveIntegrationType = (userConfig: InitConfig): InitConfig => { return found.requiredFields.reduce( (acc, current) => ({ ...acc, - [current]: (userConfig as { [param: string]: string })[current] + [current]: (userConfig as { [param: string]: string })[current], }), - { integrationType: found.type } + { integrationType: found.type }, ); }; diff --git a/src/app/config/config-resolver/resolve-object.spec.ts b/src/app/config/config-resolver/resolve-object.spec.ts index b7b69584..c7ce74ed 100644 --- a/src/app/config/config-resolver/resolve-object.spec.ts +++ b/src/app/config/config-resolver/resolve-object.spec.ts @@ -1,6 +1,7 @@ -import { resolveObject } from './resolve-object'; import { getMessageInvalidValue } from 'checkout/log-messages'; +import { resolveObject } from './resolve-object'; + jest.mock('../../log-messages'); const getMessageInvalidValueMock = getMessageInvalidValue as any; diff --git a/src/app/config/config-resolver/resolve-object.ts b/src/app/config/config-resolver/resolve-object.ts index a0e10c60..8193bf1e 100644 --- a/src/app/config/config-resolver/resolve-object.ts +++ b/src/app/config/config-resolver/resolve-object.ts @@ -1,4 +1,5 @@ import isString from 'checkout/utils/is-string'; + import { getMessageInvalidValue } from '../../log-messages'; const getObject = (inputObject: object | string): object => { diff --git a/src/app/config/config-resolver/resolve-string.spec.ts b/src/app/config/config-resolver/resolve-string.spec.ts index 7c601499..1bc6913d 100644 --- a/src/app/config/config-resolver/resolve-string.spec.ts +++ b/src/app/config/config-resolver/resolve-string.spec.ts @@ -1,6 +1,7 @@ -import { resolveString } from './resolve-string'; import { getMessageInvalidValue } from 'checkout/log-messages'; +import { resolveString } from './resolve-string'; + jest.mock('../../log-messages'); const getMessageInvalidValueMock = getMessageInvalidValue as any; diff --git a/src/app/config/config-resolver/resolve-string.ts b/src/app/config/config-resolver/resolve-string.ts index ad0d1aa7..3d73af3d 100644 --- a/src/app/config/config-resolver/resolve-string.ts +++ b/src/app/config/config-resolver/resolve-string.ts @@ -1,4 +1,5 @@ import isString from 'checkout/utils/is-string'; + import { getMessageInvalidValue } from '../../log-messages'; const getString = (userString: any): string => { diff --git a/src/app/hooks/create-payment/__mocks__/@fingerprintjs/fingerprintjs.ts b/src/app/hooks/create-payment/__mocks__/@fingerprintjs/fingerprintjs.ts index fd81924e..e60230ca 100644 --- a/src/app/hooks/create-payment/__mocks__/@fingerprintjs/fingerprintjs.ts +++ b/src/app/hooks/create-payment/__mocks__/@fingerprintjs/fingerprintjs.ts @@ -3,9 +3,9 @@ module.exports = { Promise.resolve({ get: jest.fn().mockReturnValue( Promise.resolve({ - visitorId: 'userFingerprintTest' - }) - ) - }) - ) + visitorId: 'userFingerprintTest', + }), + ), + }), + ), }; diff --git a/src/app/hooks/create-payment/create-invoice-with-template.ts b/src/app/hooks/create-payment/create-invoice-with-template.ts index 735e562e..f068470f 100644 --- a/src/app/hooks/create-payment/create-invoice-with-template.ts +++ b/src/app/hooks/create-payment/create-invoice-with-template.ts @@ -1,8 +1,8 @@ -import { toMinorAmount } from 'checkout/utils'; import { InvoiceAndToken, InvoiceTemplate, createInvoiceWithTemplate as request } from 'checkout/backend'; +import { toMinorAmount } from 'checkout/utils'; -import { AmountInfo } from '../init-app'; import { PayableInvoiceData } from './types'; +import { AmountInfo } from '../init-app'; const getAmount = (amountInfo: AmountInfo, formAmount: string): number => { switch (amountInfo.status) { @@ -15,10 +15,10 @@ const getAmount = (amountInfo: AmountInfo, formAmount: string): number => { const toPayableInvoiceData = ({ invoice: { id, dueDate, externalID }, - invoiceAccessToken + invoiceAccessToken, }: InvoiceAndToken): PayableInvoiceData => ({ invoice: { id, dueDate, externalID }, - invoiceAccessToken: invoiceAccessToken.payload + invoiceAccessToken: invoiceAccessToken.payload, }); export type CreateInvoiceParams = { @@ -34,12 +34,12 @@ export const createInvoiceWithTemplate = async ({ invoiceTemplateAccessToken, invoiceTemplate: { metadata, id }, amountInfo, - formAmount + formAmount, }: CreateInvoiceParams): Promise => { const params = { amount: getAmount(amountInfo, formAmount), metadata, - currency: amountInfo.currencyCode + currency: amountInfo.currencyCode, }; const invoiceAndToken = await request(capiEndpoint, invoiceTemplateAccessToken, id, params); return toPayableInvoiceData(invoiceAndToken); diff --git a/src/app/hooks/create-payment/create-payment.spec.ts b/src/app/hooks/create-payment/create-payment.spec.ts index 567696c6..110542cc 100644 --- a/src/app/hooks/create-payment/create-payment.spec.ts +++ b/src/app/hooks/create-payment/create-payment.spec.ts @@ -1,12 +1,13 @@ import { PaymentTerminalFormValues } from 'checkout/hooks'; -import { PaymentMethodName } from '../init-app'; + import { createPayment } from './create-payment'; +import { PaymentMethodName } from '../init-app'; const fetchMock = (result, status = 200, ok = true) => Promise.resolve({ status, ok, - json: () => Promise.resolve(result) + json: () => Promise.resolve(result), }); describe('createPayment', () => { @@ -16,7 +17,7 @@ describe('createPayment', () => { } if (args === 'https://shortener.test.com/v1/shortened-urls') { return fetchMock({ - shortenedUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + shortenedUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); } if (args === 'https://api.test.com/v2/processing/invoices/1nLoSaB3UUU/payments') { @@ -35,14 +36,14 @@ describe('createPayment', () => { initConfig: { recurring: false, metadata: { - paymentMetaField: 'payment meta field' + paymentMetaField: 'payment meta field', }, isExternalIDIncluded: true, paymentFlowHold: false, redirectUrl: 'https://init.config.redirect.url', locale: null, email: 'test@test.com', - phoneNumber: '+79774443411' + phoneNumber: '+79774443411', }, formData: { method: PaymentMethodName.PaymentTerminal, @@ -50,22 +51,22 @@ describe('createPayment', () => { provider: 'provider ID', paymentSessionInfo: { redirectUrlInfo: { - type: 'self' - } + type: 'self', + }, }, metadata: { - someField: 'test' - } - } as PaymentTerminalFormValues + someField: 'test', + }, + } as PaymentTerminalFormValues, }, payableInvoice: { invoice: { id: '1nLoSaB3UUU', dueDate: '2023-05-22T13:47:47.444260Z', - externalID: 'Invoice external ID' + externalID: 'Invoice external ID', }, - invoiceAccessToken: 'eyJhb...' - } + invoiceAccessToken: 'eyJhb...', + }, }; await createPayment(params); @@ -80,15 +81,15 @@ describe('createPayment', () => { paymentToolType: 'PaymentTerminalData', provider: 'provider ID', metadata: { - someField: 'test' - } + someField: 'test', + }, }, clientInfo: { - fingerprint: 'userFingerprintTest' - } + fingerprint: 'userFingerprintTest', + }, }), - headers: expect.any(Object) - }) + headers: expect.any(Object), + }), ); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', @@ -97,10 +98,10 @@ describe('createPayment', () => { body: JSON.stringify({ sourceUrl: 'https://origin.test.com/v1/checkout.html?invoiceID=1nLoSaB3UUU&invoiceAccessToken=eyJhb...&redirectUrl=https%3A%2F%2Finit.config.redirect.url&skipUserInteraction=true', - expiresAt: '2023-05-22T13:47:47.444260Z' + expiresAt: '2023-05-22T13:47:47.444260Z', }), - headers: expect.any(Object) - }) + headers: expect.any(Object), + }), ); expect(mockFetch).toHaveBeenCalledWith( 'https://api.test.com/v2/processing/invoices/1nLoSaB3UUU/payments', @@ -108,26 +109,26 @@ describe('createPayment', () => { method: 'POST', body: JSON.stringify({ flow: { - type: 'PaymentFlowInstant' + type: 'PaymentFlowInstant', }, payer: { payerType: 'PaymentResourcePayer', contactInfo: { email: 'test@test.com', - phoneNumber: '+79774443411' + phoneNumber: '+79774443411', }, sessionInfo: { - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' - } + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', + }, }, makeRecurrent: false, metadata: { - paymentMetaField: 'payment meta field' + paymentMetaField: 'payment meta field', }, - externalID: 'Invoice external ID' + externalID: 'Invoice external ID', }), - headers: expect.any(Object) - }) + headers: expect.any(Object), + }), ); }); }); diff --git a/src/app/hooks/create-payment/create-payment.ts b/src/app/hooks/create-payment/create-payment.ts index 78d267cb..7b233a3c 100644 --- a/src/app/hooks/create-payment/create-payment.ts +++ b/src/app/hooks/create-payment/create-payment.ts @@ -1,7 +1,8 @@ +import { Payment, createPayment as request } from 'checkout/backend'; + import { createPayer } from './payer'; import { toPaymentFlow } from './to-payment-flow'; import { CreatePaymentParams } from './types'; -import { Payment, createPayment as request } from 'checkout/backend'; export const createPayment = async ({ capiEndpoint, @@ -9,7 +10,7 @@ export const createPayment = async ({ origin, initConfig, formData, - payableInvoice + payableInvoice, }: CreatePaymentParams): Promise => { const { invoice, invoiceAccessToken } = payableInvoice; const { @@ -21,7 +22,7 @@ export const createPayment = async ({ holdExpiration, recurring, metadata, - isExternalIDIncluded + isExternalIDIncluded, } = initConfig; const payer = await createPayer({ capiEndpoint, @@ -31,17 +32,17 @@ export const createPayment = async ({ redirectUrl, locale, email, - phoneNumber + phoneNumber, }, formData, - payableInvoice + payableInvoice, }); const params = { flow: toPaymentFlow({ paymentFlowHold, holdExpiration }), payer, makeRecurrent: recurring, metadata, - externalID: isExternalIDIncluded ? invoice.externalID : undefined + externalID: isExternalIDIncluded ? invoice.externalID : undefined, }; return await request(capiEndpoint, invoiceAccessToken, invoice.id, params); }; diff --git a/src/app/hooks/create-payment/payer/create-payer.ts b/src/app/hooks/create-payment/payer/create-payer.ts index daf32546..405a561b 100644 --- a/src/app/hooks/create-payment/payer/create-payer.ts +++ b/src/app/hooks/create-payment/payer/create-payer.ts @@ -1,4 +1,5 @@ import { PayerType, PaymentResourcePayer } from 'checkout/backend'; + import { createPaymentResource } from './create-payment-resource'; import { createSessionInfo } from './create-session-info'; import { toContactInfo } from './to-contact-info'; @@ -10,12 +11,12 @@ export const createPayer = async ({ origin, payableInvoice, initConfig, - formData + formData, }: CreatePayerParams): Promise => { const { paymentToolToken, paymentSession } = await createPaymentResource( capiEndpoint, payableInvoice.invoiceAccessToken, - formData + formData, ); const sessionInfo = await createSessionInfo(urlShortenerEndpoint, origin, initConfig, payableInvoice, formData); const contactInfo = toContactInfo(initConfig, formData.values); @@ -24,6 +25,6 @@ export const createPayer = async ({ paymentToolToken, paymentSession, contactInfo, - sessionInfo + sessionInfo, }; }; diff --git a/src/app/hooks/create-payment/payer/create-payment-resource.ts b/src/app/hooks/create-payment/payer/create-payment-resource.ts index 1297449b..320f99c0 100644 --- a/src/app/hooks/create-payment/payer/create-payment-resource.ts +++ b/src/app/hooks/create-payment/payer/create-payment-resource.ts @@ -1,5 +1,7 @@ import { load } from '@fingerprintjs/fingerprintjs'; + import { PaymentResource, createPaymentResource as request } from 'checkout/backend'; + import { toPaymentTool } from './to-payment-tool'; import { FormData } from '../types'; @@ -17,12 +19,12 @@ const getFingerprint = (): Promise => export const createPaymentResource = async ( capiEndpoint: string, invoiceAccessToken: string, - formData: FormData + formData: FormData, ): Promise => { const paymentTool = toPaymentTool(formData); const clientInfo = { fingerprint: await getFingerprint(), - ...getClientInfoUrl() + ...getClientInfoUrl(), }; return request(capiEndpoint, invoiceAccessToken, paymentTool, clientInfo); }; diff --git a/src/app/hooks/create-payment/payer/create-session-info.spec.ts b/src/app/hooks/create-payment/payer/create-session-info.spec.ts index bf394ba9..c9643d66 100644 --- a/src/app/hooks/create-payment/payer/create-session-info.spec.ts +++ b/src/app/hooks/create-payment/payer/create-session-info.spec.ts @@ -1,19 +1,20 @@ import { PaymentMethodName } from 'checkout/backend'; -import { createSessionInfo } from './create-session-info'; import { PaymentTerminalFormValues } from 'checkout/hooks'; +import { createSessionInfo } from './create-session-info'; + const fetchMock = (result, status = 200, ok = true) => Promise.resolve({ status, ok, - json: () => Promise.resolve(result) + json: () => Promise.resolve(result), }); describe('createSessionInfo', () => { const mockFetch = jest.fn().mockImplementation((args) => { if (args === 'https://shortener.test.com/v1/shortened-urls') { return fetchMock({ - shortenedUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + shortenedUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); } return Promise.reject('Mock function is not found'); @@ -29,15 +30,15 @@ describe('createSessionInfo', () => { const origin = 'https://origin.test.com'; const initConfig = { redirectUrl: 'https://init.config.redirect.url', - locale: 'kr' + locale: 'kr', }; const invoiceData = { invoice: { id: '1nLoSaB3UUU', dueDate: '2023-05-22T13:47:47.444260Z', - externalID: 'Invoice external ID' + externalID: 'Invoice external ID', }, - invoiceAccessToken: 'eyJhb...' + invoiceAccessToken: 'eyJhb...', }; const shortenerCallBody = (skipUserInteraction) => @@ -45,9 +46,9 @@ describe('createSessionInfo', () => { method: 'POST', body: JSON.stringify({ sourceUrl: `https://origin.test.com/v1/checkout.html?invoiceID=1nLoSaB3UUU&invoiceAccessToken=eyJhb...&redirectUrl=https%3A%2F%2Finit.config.redirect.url&locale=kr&skipUserInteraction=${skipUserInteraction}`, - expiresAt: '2023-05-22T13:47:47.444260Z' + expiresAt: '2023-05-22T13:47:47.444260Z', }), - headers: expect.any(Object) + headers: expect.any(Object), }); describe('method payment terminal', () => { @@ -60,10 +61,10 @@ describe('createSessionInfo', () => { values: { paymentSessionInfo: { redirectUrlInfo: { - type: 'self' - } - } - } as PaymentTerminalFormValues + type: 'self', + }, + }, + } as PaymentTerminalFormValues, }; test('should shorten with initConfigRedirectUrl', async () => { @@ -72,15 +73,15 @@ describe('createSessionInfo', () => { origin, initConfig, invoiceData, - formValues + formValues, ); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', - shortenerCallBody(skipUserInteraction) + shortenerCallBody(skipUserInteraction), ); }); @@ -90,10 +91,10 @@ describe('createSessionInfo', () => { origin, { redirectUrl: null }, invoiceData, - formValues + formValues, ); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( @@ -102,10 +103,10 @@ describe('createSessionInfo', () => { method: 'POST', body: JSON.stringify({ sourceUrl: `https://origin.test.com/v1/checkout.html?invoiceID=1nLoSaB3UUU&invoiceAccessToken=eyJhb...&skipUserInteraction=${skipUserInteraction}`, - expiresAt: '2023-05-22T13:47:47.444260Z' + expiresAt: '2023-05-22T13:47:47.444260Z', }), - headers: expect.any(Object) - }) + headers: expect.any(Object), + }), ); }); }); @@ -116,10 +117,10 @@ describe('createSessionInfo', () => { values: { paymentSessionInfo: { redirectUrlInfo: { - type: 'outer' - } - } - } as PaymentTerminalFormValues + type: 'outer', + }, + }, + } as PaymentTerminalFormValues, }; test('should return initConfigRedirectUrl and do not shorten', async () => { @@ -128,10 +129,10 @@ describe('createSessionInfo', () => { origin, initConfig, invoiceData, - formValues + formValues, ); expect(result).toStrictEqual({ - redirectUrl: 'https://init.config.redirect.url' + redirectUrl: 'https://init.config.redirect.url', }); expect(mockFetch).toHaveBeenCalledTimes(0); }); @@ -143,10 +144,10 @@ describe('createSessionInfo', () => { origin, { redirectUrl: null }, invoiceData, - formValues + formValues, ); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( @@ -155,10 +156,10 @@ describe('createSessionInfo', () => { method: 'POST', body: JSON.stringify({ sourceUrl: `https://origin.test.com/v1/checkout.html?invoiceID=1nLoSaB3UUU&invoiceAccessToken=eyJhb...&skipUserInteraction=${skipUserInteraction}`, - expiresAt: '2023-05-22T13:47:47.444260Z' + expiresAt: '2023-05-22T13:47:47.444260Z', }), - headers: expect.any(Object) - }) + headers: expect.any(Object), + }), ); expect(errorSpy).toHaveBeenCalled(); }); @@ -168,17 +169,17 @@ describe('createSessionInfo', () => { test('redirect url info is not specified', async () => { const formValues = { method: PaymentMethodName.PaymentTerminal, - values: {} + values: {}, }; const result = await createSessionInfo(urlShortenerEndpoint, origin, initConfig, invoiceData, formValues); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', - shortenerCallBody(skipUserInteraction) + shortenerCallBody(skipUserInteraction), ); }); @@ -186,18 +187,18 @@ describe('createSessionInfo', () => { const formValues = { method: PaymentMethodName.PaymentTerminal, values: { - paymentSessionInfo: {} - } as PaymentTerminalFormValues + paymentSessionInfo: {}, + } as PaymentTerminalFormValues, }; const result = await createSessionInfo(urlShortenerEndpoint, origin, initConfig, invoiceData, formValues); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', - shortenerCallBody(skipUserInteraction) + shortenerCallBody(skipUserInteraction), ); }); }); @@ -207,17 +208,17 @@ describe('createSessionInfo', () => { test('should shorten redirect url with false skipUserInteraction', async () => { const formValues = { - method: PaymentMethodName.BankCard + method: PaymentMethodName.BankCard, }; const result = await createSessionInfo(urlShortenerEndpoint, origin, initConfig, invoiceData, formValues); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', - shortenerCallBody(skipUserInteraction) + shortenerCallBody(skipUserInteraction), ); }); }); @@ -227,17 +228,17 @@ describe('createSessionInfo', () => { test('should shorten redirect url with false skipUserInteraction', async () => { const formValues = { - method: PaymentMethodName.DigitalWallet + method: PaymentMethodName.DigitalWallet, }; const result = await createSessionInfo(urlShortenerEndpoint, origin, initConfig, invoiceData, formValues); expect(result).toStrictEqual({ - redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH' + redirectUrl: 'https://shrt.empayre.com/6ut9gYaaMwH', }); expect(mockFetch).toHaveBeenCalledTimes(1); expect(mockFetch).toHaveBeenCalledWith( 'https://shortener.test.com/v1/shortened-urls', - shortenerCallBody(skipUserInteraction) + shortenerCallBody(skipUserInteraction), ); }); }); diff --git a/src/app/hooks/create-payment/payer/create-session-info.ts b/src/app/hooks/create-payment/payer/create-session-info.ts index cd0515e2..8e18c35f 100644 --- a/src/app/hooks/create-payment/payer/create-session-info.ts +++ b/src/app/hooks/create-payment/payer/create-session-info.ts @@ -1,13 +1,14 @@ import { PaymentMethodName, SessionInfo, ShortenedUrlParams, shortenUrl } from 'checkout/backend'; -import { FormData, PayableInvoiceData } from '../types'; -import { toSelfRedirectUrl } from './to-self-redirect-url'; import { PaymentTerminalFormValues } from 'checkout/hooks'; import isNil from 'checkout/utils/is-nil'; +import { toSelfRedirectUrl } from './to-self-redirect-url'; +import { FormData, PayableInvoiceData } from '../types'; + export const shorten = ( urlShortenerEndpoint: string, invoiceAccessToken: string, - params: ShortenedUrlParams + params: ShortenedUrlParams, ): Promise => shortenUrl(urlShortenerEndpoint, invoiceAccessToken, params).then(({ shortenedUrl }) => shortenedUrl); @@ -36,7 +37,7 @@ export const createSessionInfo = async ( origin: string, initConfig: { redirectUrl?: string; locale?: string }, { invoice, invoiceAccessToken }: PayableInvoiceData, - formValues: FormData + formValues: FormData, ): Promise => { let redirectUrl; const redirectUrlType = toRedirectUrlType(formValues, initConfig.redirectUrl); @@ -48,9 +49,9 @@ export const createSessionInfo = async ( invoice.id, invoiceAccessToken, initConfig, - isSkipUserInteractionParam(formValues.method) + isSkipUserInteractionParam(formValues.method), ), - expiresAt: invoice.dueDate + expiresAt: invoice.dueDate, }); break; case 'outer': diff --git a/src/app/hooks/create-payment/payer/to-contact-info.spec.ts b/src/app/hooks/create-payment/payer/to-contact-info.spec.ts index e1cff0a9..6c9447b7 100644 --- a/src/app/hooks/create-payment/payer/to-contact-info.spec.ts +++ b/src/app/hooks/create-payment/payer/to-contact-info.spec.ts @@ -1,16 +1,17 @@ import { PaymentTerminalFormValues } from 'checkout/hooks'; + import { toContactInfo } from './to-contact-info'; describe('toContactInfo', () => { test('should return empty object', () => { const initConfig = { - someField1: 'someValue1' + someField1: 'someValue1', } as any; const formValues = { amount: 'test', metadata: { - someField3: 'someValue1' - } + someField3: 'someValue1', + }, } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); @@ -21,15 +22,15 @@ describe('toContactInfo', () => { test('should apply init config data', () => { const initConfig = { email: 'test@test.com', - phoneNumber: '+79772223323' + phoneNumber: '+79772223323', }; const formValues = { metadata: { email: 'meta-email@test.com', - phoneNumber: 'metaPhoneNumber' + phoneNumber: 'metaPhoneNumber', }, email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); @@ -39,15 +40,15 @@ describe('toContactInfo', () => { test('should apply metadata', () => { const initConfig = { email: null, - phoneNumber: null + phoneNumber: null, }; const formValues = { metadata: { email: 'meta-email@test.com', - phoneNumber: 'metaPhoneNumber' + phoneNumber: 'metaPhoneNumber', }, email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); @@ -57,36 +58,36 @@ describe('toContactInfo', () => { test('should apply metadata', () => { const initConfig = { email: null, - phoneNumber: null + phoneNumber: null, }; const formValues = { email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); expect(result).toStrictEqual({ email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', }); }); test('should apply form value email', () => { const initConfig = { - phoneNumber: '+79772223323' + phoneNumber: '+79772223323', } as any; const formValues = { metadata: { email: 'meta-email@test.com', - phoneNumber: 'metaPhoneNumber' + phoneNumber: 'metaPhoneNumber', }, - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); const expected = { email: 'meta-email@test.com', - phoneNumber: '+79772223323' + phoneNumber: '+79772223323', }; expect(result).toStrictEqual(expected); }); @@ -94,20 +95,20 @@ describe('toContactInfo', () => { test('should apply form value phoneNumber', () => { const initConfig = { email: 'test@test.com', - phoneNumber: null + phoneNumber: null, }; const formValues = { metadata: { email: 'meta-email@test.com', - phoneNumber: 'metaPhoneNumber' + phoneNumber: 'metaPhoneNumber', }, - email: 'form-email@test.com' + email: 'form-email@test.com', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); const expected = { email: 'test@test.com', - phoneNumber: 'metaPhoneNumber' + phoneNumber: 'metaPhoneNumber', }; expect(result).toStrictEqual(expected); }); @@ -116,7 +117,7 @@ describe('toContactInfo', () => { const initConfig = {} as any; const formValues = { email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); @@ -128,14 +129,14 @@ describe('toContactInfo', () => { const initConfig = {} as any; const formValues = { email: ' form-email@test.com', - phoneNumber: 'formPhoneNumber ' + phoneNumber: 'formPhoneNumber ', } as PaymentTerminalFormValues; const result = toContactInfo(initConfig, formValues); expect(result).toStrictEqual({ email: 'form-email@test.com', - phoneNumber: 'formPhoneNumber' + phoneNumber: 'formPhoneNumber', }); }); }); diff --git a/src/app/hooks/create-payment/payer/to-contact-info.ts b/src/app/hooks/create-payment/payer/to-contact-info.ts index 49f9723c..a932a815 100644 --- a/src/app/hooks/create-payment/payer/to-contact-info.ts +++ b/src/app/hooks/create-payment/payer/to-contact-info.ts @@ -1,7 +1,7 @@ -import replaceSpaces from 'checkout/utils/replace-spaces'; -import isNil from 'checkout/utils/is-nil'; -import { PayableFormValues, PaymentTerminalFormValues } from 'checkout/hooks'; import { ContactInfo } from 'checkout/backend'; +import { PayableFormValues, PaymentTerminalFormValues } from 'checkout/hooks'; +import isNil from 'checkout/utils/is-nil'; +import replaceSpaces from 'checkout/utils/replace-spaces'; const mapFrom = (obj: { email?: string; phoneNumber?: string }, targetKeys = ['email', 'phoneNumber']): ContactInfo => { const defaultResult = {} as ContactInfo; @@ -15,14 +15,14 @@ const mapFrom = (obj: { email?: string; phoneNumber?: string }, targetKeys = ['e } return { ...acc, - [targetKey]: replaceSpaces(val) + [targetKey]: replaceSpaces(val), }; }, defaultResult); }; export const toContactInfo = ( initConfig: { email: string; phoneNumber: string }, - formValues: PayableFormValues + formValues: PayableFormValues, ): ContactInfo => { const fromFormValues = mapFrom(formValues); const fromMetadata = mapFrom((formValues as PaymentTerminalFormValues)?.metadata); @@ -30,7 +30,7 @@ export const toContactInfo = ( const byPriority = { ...fromFormValues, ...fromMetadata, - ...fromInitConfig + ...fromInitConfig, }; return byPriority; }; diff --git a/src/app/hooks/create-payment/payer/to-payment-tool.ts b/src/app/hooks/create-payment/payer/to-payment-tool.ts index 9cef4bc8..191e2bb4 100644 --- a/src/app/hooks/create-payment/payer/to-payment-tool.ts +++ b/src/app/hooks/create-payment/payer/to-payment-tool.ts @@ -1,6 +1,7 @@ import { CardData, PaymentMethodName, PaymentTool, PaymentToolType } from 'checkout/backend'; import { CardFormValues, PaymentTerminalFormValues, WalletFormValues } from 'checkout/hooks'; import replaceSpaces from 'checkout/utils/replace-spaces'; + import { FormData } from '../types'; const toPaymentToolBankCard = (values: CardFormValues): CardData => { @@ -11,19 +12,19 @@ const toPaymentToolBankCard = (values: CardFormValues): CardData => { cardNumber, expDate, cvv: values.secureCode, - cardHolder: values.cardHolder + cardHolder: values.cardHolder, }; }; const toPaymentToolDigitalWallet = (values: WalletFormValues) => ({ paymentToolType: PaymentToolType.DigitalWalletData, - ...values + ...values, }); const toPaymentToolTerminal = (values: PaymentTerminalFormValues) => ({ paymentToolType: PaymentToolType.PaymentTerminalData, provider: values.provider, - metadata: values.metadata + metadata: values.metadata, }); export const toPaymentTool = (formValues: FormData): PaymentTool => { diff --git a/src/app/hooks/create-payment/payer/to-self-redirect-url.ts b/src/app/hooks/create-payment/payer/to-self-redirect-url.ts index 93f0976d..5d4f504c 100644 --- a/src/app/hooks/create-payment/payer/to-self-redirect-url.ts +++ b/src/app/hooks/create-payment/payer/to-self-redirect-url.ts @@ -5,12 +5,12 @@ export const toSelfRedirectUrl = ( invoiceID: string, invoiceAccessToken: string, { redirectUrl, locale }: { redirectUrl?: string; locale?: string }, - skipUserInteraction: boolean + skipUserInteraction: boolean, ) => `${origin}/v1/checkout.html?${serializeUrlParams({ invoiceID, invoiceAccessToken, redirectUrl, locale, - skipUserInteraction + skipUserInteraction, })}`; diff --git a/src/app/hooks/create-payment/to-payment-flow.ts b/src/app/hooks/create-payment/to-payment-flow.ts index 86e3fa62..a69ca345 100644 --- a/src/app/hooks/create-payment/to-payment-flow.ts +++ b/src/app/hooks/create-payment/to-payment-flow.ts @@ -1,8 +1,12 @@ import { FlowType, PaymentFlow } from 'checkout/backend'; + import { PaymentFlowParams } from './types'; export const toPaymentFlow = ({ paymentFlowHold, holdExpiration }: PaymentFlowParams): PaymentFlow => { - const hold = { type: FlowType.PaymentFlowHold, onHoldExpiration: holdExpiration }; + const hold = { + type: FlowType.PaymentFlowHold, + onHoldExpiration: holdExpiration, + }; const instant = { type: FlowType.PaymentFlowInstant }; return paymentFlowHold ? hold : instant; }; diff --git a/src/app/hooks/create-payment/types/index.ts b/src/app/hooks/create-payment/types/index.ts index 9470f5e6..6a5d6af1 100644 --- a/src/app/hooks/create-payment/types/index.ts +++ b/src/app/hooks/create-payment/types/index.ts @@ -1,4 +1,5 @@ import { HoldExpirationType } from 'checkout/backend'; + import { FormData } from './form-data'; export * from '../payer/types'; diff --git a/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.spec.ts b/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.spec.ts index 549e4bcf..5afe5a37 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.spec.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.spec.ts @@ -7,7 +7,7 @@ it('should return amount', () => { cost: 100000, price: 100000, product: 'Product 1', - quantity: 1 + quantity: 1, }, { cost: 400000, @@ -16,8 +16,8 @@ it('should return amount', () => { quantity: 2, taxMode: { rate: '0%', - type: 'InvoiceLineTaxVAT' - } + type: 'InvoiceLineTaxVAT', + }, }, { cost: 500000, @@ -26,19 +26,19 @@ it('should return amount', () => { quantity: 1, taxMode: { rate: '18%', - type: 'InvoiceLineTaxVAT' - } - } + type: 'InvoiceLineTaxVAT', + }, + }, ], currency: 'RUB', - templateType: 'InvoiceTemplateMultiLine' + templateType: 'InvoiceTemplateMultiLine', } as any; const actual = getAmountFromMultiLine(multiLine, 'ru'); const expected = { status: 'final', currencyCode: 'RUB', minorValue: 1000000, - locale: 'ru' + locale: 'ru', }; expect(actual).toEqual(expected); }); diff --git a/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.ts b/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.ts index 07e16d1f..294a2cec 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-from-multi-line.ts @@ -1,9 +1,10 @@ import { InvoiceTemplateMultiLine } from 'checkout/backend'; + import { AmountInfo } from './types'; export const getAmountFromMultiLine = (details: InvoiceTemplateMultiLine, locale: string): AmountInfo => ({ status: 'final', minorValue: details.cart.reduce((p, c) => p + c.price * c.quantity, 0), currencyCode: details.currency, - locale + locale, }); diff --git a/src/app/hooks/init-app/amount-info/get-amount-from-single-line.spec.ts b/src/app/hooks/init-app/amount-info/get-amount-from-single-line.spec.ts index 726d0d24..9a50703e 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-from-single-line.spec.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-from-single-line.spec.ts @@ -5,15 +5,15 @@ it('InvoiceTemplateLineCostFixed should return amount', () => { price: { costType: 'InvoiceTemplateLineCostFixed', amount: 149900, - currency: 'RUB' - } + currency: 'RUB', + }, } as any; const actual = getAmountFromSingleLine(singleLine, 111, 'ru'); const expected = { status: 'final', currencyCode: 'RUB', locale: 'ru', - minorValue: 149900 + minorValue: 149900, }; expect(actual).toEqual(expected); }); @@ -24,10 +24,10 @@ describe('InvoiceTemplateLineCostRange', () => { costType: 'InvoiceTemplateLineCostRange', range: { lowerBound: 1000, - upperBound: 2000 + upperBound: 2000, }, - currency: 'RUB' - } + currency: 'RUB', + }, } as any; it('with amountConfig should return final status', () => { @@ -36,7 +36,7 @@ describe('InvoiceTemplateLineCostRange', () => { status: 'final', currencyCode: 'RUB', minorValue: 111, - locale: 'ru' + locale: 'ru', }; expect(actual).toEqual(expected); }); @@ -47,7 +47,7 @@ describe('InvoiceTemplateLineCostRange', () => { status: 'notKnown', currencyCode: 'RUB', locale: 'ru', - minorValue: undefined + minorValue: undefined, }; expect(actual).toEqual(expected); }); @@ -56,8 +56,8 @@ describe('InvoiceTemplateLineCostRange', () => { describe('InvoiceTemplateLineCostUnlim', () => { const singleLine = { price: { - costType: 'InvoiceTemplateLineCostUnlim' - } + costType: 'InvoiceTemplateLineCostUnlim', + }, } as any; it('with amountConfig should return final status', () => { @@ -66,7 +66,7 @@ describe('InvoiceTemplateLineCostUnlim', () => { status: 'final', currencyCode: 'RUB', minorValue: 111, - locale: 'ru' + locale: 'ru', }; expect(actual).toEqual(expected); }); @@ -76,7 +76,7 @@ describe('InvoiceTemplateLineCostUnlim', () => { const expected = { status: 'notKnown', currencyCode: 'RUB', - locale: 'ru' + locale: 'ru', }; expect(actual).toEqual(expected); }); diff --git a/src/app/hooks/init-app/amount-info/get-amount-from-single-line.ts b/src/app/hooks/init-app/amount-info/get-amount-from-single-line.ts index 42d9f815..787df360 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-from-single-line.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-from-single-line.ts @@ -1,10 +1,11 @@ -import isNumber from 'checkout/utils/is-number'; import { CostType, InvoiceTemplateLineCostFixed, InvoiceTemplateLineCostRange, - InvoiceTemplateSingleLine + InvoiceTemplateSingleLine, } from 'checkout/backend/model'; +import isNumber from 'checkout/utils/is-number'; + import { AmountInfo } from './types'; const getStatus = (configAmount: number) => (isNumber(configAmount) ? 'final' : 'notKnown'); @@ -12,7 +13,7 @@ const getStatus = (configAmount: number) => (isNumber(configAmount) ? 'final' : export const getAmountFromSingleLine = ( details: InvoiceTemplateSingleLine, configAmount: number, - locale: string + locale: string, ): AmountInfo => { const price = details.price; if (!price) { @@ -25,21 +26,21 @@ export const getAmountFromSingleLine = ( status: 'final', minorValue: fixed.amount, currencyCode: fixed.currency, - locale + locale, }; case CostType.InvoiceTemplateLineCostRange: return { status: getStatus(configAmount), minorValue: configAmount || undefined, currencyCode: (price as InvoiceTemplateLineCostRange).currency, - locale + locale, }; case CostType.InvoiceTemplateLineCostUnlim: return { status: getStatus(configAmount), minorValue: configAmount || undefined, currencyCode: 'RUB', // TODO unlim cost type does't support currency - locale + locale, }; } }; diff --git a/src/app/hooks/init-app/amount-info/get-amount-info.spec.ts b/src/app/hooks/init-app/amount-info/get-amount-info.spec.ts index a929ea23..572d3d7b 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-info.spec.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-info.spec.ts @@ -1,5 +1,5 @@ -import { resolveInvoice } from './resolve-invoice'; import { getAmountInfo } from './get-amount-info'; +import { resolveInvoice } from './resolve-invoice'; import { resolveInvoiceTemplate } from './resolve-invoice-template'; jest.mock('./resolve-invoice'); @@ -10,10 +10,10 @@ const resolveInvoiceTemplateMock = resolveInvoiceTemplate as any; it('invoice integration type should call resolveInvoice', () => { const initConfig = { - integrationType: 'invoice' + integrationType: 'invoice', } as any; const model = { - invoice: 'invoiceMock' + invoice: 'invoiceMock', } as any; getAmountInfo(initConfig, model); expect(resolveInvoiceMock.mock.calls.length).toBe(1); @@ -23,10 +23,10 @@ it('invoice integration type should call resolveInvoice', () => { it('invoice template integration type should call resolveInvoiceTemplate', () => { const initConfig = { integrationType: 'invoiceTemplate', - amount: 999 + amount: 999, } as any; const model = { - invoiceTemplate: 'invoiceTemplateMock' + invoiceTemplate: 'invoiceTemplateMock', } as any; getAmountInfo(initConfig, model); expect(resolveInvoiceTemplateMock.mock.calls.length).toBe(1); diff --git a/src/app/hooks/init-app/amount-info/get-amount-info.ts b/src/app/hooks/init-app/amount-info/get-amount-info.ts index 0660c628..6a7b1182 100644 --- a/src/app/hooks/init-app/amount-info/get-amount-info.ts +++ b/src/app/hooks/init-app/amount-info/get-amount-info.ts @@ -1,6 +1,7 @@ import { InitConfig } from 'checkout/config'; -import { resolveInvoiceTemplate } from './resolve-invoice-template'; + import { resolveInvoice } from './resolve-invoice'; +import { resolveInvoiceTemplate } from './resolve-invoice-template'; import { AmountInfo } from './types'; import { Model } from '..'; diff --git a/src/app/hooks/init-app/amount-info/resolve-invoice-template.spec.ts b/src/app/hooks/init-app/amount-info/resolve-invoice-template.spec.ts index 253cedd8..8b607124 100644 --- a/src/app/hooks/init-app/amount-info/resolve-invoice-template.spec.ts +++ b/src/app/hooks/init-app/amount-info/resolve-invoice-template.spec.ts @@ -1,8 +1,9 @@ -import { getAmountFromSingleLine } from './get-amount-from-single-line'; -import { getAmountFromMultiLine } from './get-amount-from-multi-line'; -import { resolveInvoiceTemplate } from './resolve-invoice-template'; import { TemplateType } from 'checkout/backend'; +import { getAmountFromMultiLine } from './get-amount-from-multi-line'; +import { getAmountFromSingleLine } from './get-amount-from-single-line'; +import { resolveInvoiceTemplate } from './resolve-invoice-template'; + jest.mock('./get-amount-from-single-line'); jest.mock('./get-amount-from-multi-line'); @@ -12,8 +13,8 @@ const getAmountFromMultiLineMocked = getAmountFromMultiLine as any; it('InvoiceTemplateSingleLine should call getAmountFromSingleLine', () => { const singleLine = { details: { - templateType: TemplateType.InvoiceTemplateSingleLine - } + templateType: TemplateType.InvoiceTemplateSingleLine, + }, } as any; getAmountFromSingleLineMocked.mockReturnValueOnce(singleLine.details); resolveInvoiceTemplate(singleLine, 111, 'ru'); @@ -23,8 +24,8 @@ it('InvoiceTemplateSingleLine should call getAmountFromSingleLine', () => { it('InvoiceTemplateMultiLine should call getAmountFromMultiLine', () => { const multiLine = { details: { - templateType: TemplateType.InvoiceTemplateMultiLine - } + templateType: TemplateType.InvoiceTemplateMultiLine, + }, } as any; getAmountFromMultiLineMocked.mockReturnValueOnce(multiLine.details); resolveInvoiceTemplate(multiLine, 111, 'ru'); diff --git a/src/app/hooks/init-app/amount-info/resolve-invoice-template.ts b/src/app/hooks/init-app/amount-info/resolve-invoice-template.ts index c48af2bc..7a09515a 100644 --- a/src/app/hooks/init-app/amount-info/resolve-invoice-template.ts +++ b/src/app/hooks/init-app/amount-info/resolve-invoice-template.ts @@ -1,12 +1,13 @@ import { InvoiceTemplate, InvoiceTemplateMultiLine, InvoiceTemplateSingleLine, TemplateType } from 'checkout/backend'; -import { getAmountFromSingleLine } from './get-amount-from-single-line'; + import { getAmountFromMultiLine } from './get-amount-from-multi-line'; +import { getAmountFromSingleLine } from './get-amount-from-single-line'; import { AmountInfo } from './types'; export const resolveInvoiceTemplate = ( invoiceTemplate: InvoiceTemplate, configAmount: number, - locale: string + locale: string, ): AmountInfo => { switch (invoiceTemplate.details.templateType) { case TemplateType.InvoiceTemplateSingleLine: diff --git a/src/app/hooks/init-app/amount-info/resolve-invoice.spec.ts b/src/app/hooks/init-app/amount-info/resolve-invoice.spec.ts index 2af710ba..dd27cf84 100644 --- a/src/app/hooks/init-app/amount-info/resolve-invoice.spec.ts +++ b/src/app/hooks/init-app/amount-info/resolve-invoice.spec.ts @@ -3,14 +3,14 @@ import { resolveInvoice } from './resolve-invoice'; it('should return amount', () => { const invoice = { amount: 10000, - currency: 'RUB' + currency: 'RUB', } as any; const actual = resolveInvoice(invoice, 'ru'); const expected = { status: 'final', currencyCode: 'RUB', minorValue: 10000, - locale: 'ru' + locale: 'ru', }; expect(actual).toEqual(expected); }); diff --git a/src/app/hooks/init-app/amount-info/resolve-invoice.ts b/src/app/hooks/init-app/amount-info/resolve-invoice.ts index 42de3123..a5a2926d 100644 --- a/src/app/hooks/init-app/amount-info/resolve-invoice.ts +++ b/src/app/hooks/init-app/amount-info/resolve-invoice.ts @@ -1,9 +1,10 @@ import { Invoice } from 'checkout/backend'; + import { AmountInfo } from './types'; export const resolveInvoice = ({ amount, currency }: Invoice, locale: string): AmountInfo => ({ status: 'final', minorValue: amount, currencyCode: currency, - locale + locale, }); diff --git a/src/app/hooks/init-app/fetch-model.ts b/src/app/hooks/init-app/fetch-model.ts index 526b4ece..93ea2576 100644 --- a/src/app/hooks/init-app/fetch-model.ts +++ b/src/app/hooks/init-app/fetch-model.ts @@ -2,11 +2,11 @@ import { getInvoiceByID, getInvoicePaymentMethods, getInvoiceTemplateByID, - getInvoicePaymentMethodsByTemplateID + getInvoicePaymentMethodsByTemplateID, } from 'checkout/backend'; +import { InitConfig } from 'checkout/config'; import { getServiceProviders } from './get-service-providers'; -import { InitConfig } from 'checkout/config'; import { Model } from './types'; type InvoiceTemplateParams = { @@ -26,13 +26,13 @@ const isInvoiceTemplateParams = (params: InitConfig): params is InvoiceTemplateP const resolveInvoiceTemplate = async ( endpoint: string, - { invoiceTemplateID, invoiceTemplateAccessToken }: InvoiceTemplateParams + { invoiceTemplateID, invoiceTemplateAccessToken }: InvoiceTemplateParams, ): Promise => { const invoiceTemplate = await getInvoiceTemplateByID(endpoint, invoiceTemplateAccessToken, invoiceTemplateID); const paymentMethods = await getInvoicePaymentMethodsByTemplateID( endpoint, invoiceTemplateAccessToken, - invoiceTemplateID + invoiceTemplateID, ); const serviceProviders = await getServiceProviders(paymentMethods, endpoint, invoiceTemplateAccessToken); return { paymentMethods, invoiceTemplate, serviceProviders }; diff --git a/src/app/hooks/init-app/get-service-providers.ts b/src/app/hooks/init-app/get-service-providers.ts index d8f34b4f..cd79f655 100644 --- a/src/app/hooks/init-app/get-service-providers.ts +++ b/src/app/hooks/init-app/get-service-providers.ts @@ -3,14 +3,14 @@ import { PaymentMethod, PaymentMethodName, PaymentTerminal, - ServiceProvider + ServiceProvider, } from 'checkout/backend'; import { logPrefix } from 'checkout/log-messages'; export async function getServiceProviderOrNull( endpoint: string, accessToken: string, - id: string + id: string, ): Promise { try { return await getServiceProviderByID(endpoint, accessToken, id); @@ -32,11 +32,11 @@ const providerIDsReducer = (result: string[], method: PaymentMethod): string[] = export async function getServiceProviders( paymentMethods: PaymentMethod[], endpoint: string, - accessToken: string + accessToken: string, ): Promise { const providerIDs = paymentMethods.reduce(providerIDsReducer, []); const serviceProvidersOrNull = await Promise.all( - providerIDs.map((id) => getServiceProviderOrNull(endpoint, accessToken, id)) + providerIDs.map((id) => getServiceProviderOrNull(endpoint, accessToken, id)), ); return serviceProvidersOrNull.filter((provider) => provider !== null); } diff --git a/src/app/hooks/init-app/init-app.ts b/src/app/hooks/init-app/init-app.ts index 9978885c..2c582cf8 100644 --- a/src/app/hooks/init-app/init-app.ts +++ b/src/app/hooks/init-app/init-app.ts @@ -1,8 +1,9 @@ import { getLocale } from 'checkout/backend'; -import { fetchModel } from './fetch-model'; -import { getAmountInfo } from './amount-info'; -import { initAvailablePaymentMethods } from './init-available-payment-methods'; import { InitParams } from 'checkout/initialize'; + +import { getAmountInfo } from './amount-info'; +import { fetchModel } from './fetch-model'; +import { initAvailablePaymentMethods } from './init-available-payment-methods'; import { InitialData } from './types'; export const initApp = async ({ initConfig, appConfig, origin }: InitParams): Promise => { @@ -17,6 +18,6 @@ export const initApp = async ({ initConfig, appConfig, origin }: InitParams): Pr locale, model, amountInfo, - availablePaymentMethods + availablePaymentMethods, }; }; diff --git a/src/app/hooks/init-app/init-available-payment-methods/bank-card-to-methods/bank-card-to-methods.ts b/src/app/hooks/init-app/init-available-payment-methods/bank-card-to-methods/bank-card-to-methods.ts index 674bb9c3..fe73475f 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/bank-card-to-methods/bank-card-to-methods.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/bank-card-to-methods/bank-card-to-methods.ts @@ -1,8 +1,9 @@ -import { PaymentMethod as PaymentMethodState, PaymentMethodName as PaymentMethodNameState } from '../types'; import { InitConfig } from 'checkout/config'; +import { PaymentMethod as PaymentMethodState, PaymentMethodName as PaymentMethodNameState } from '../types'; + export function bankCardToMethods(initConfig: InitConfig): PaymentMethodState[] { - let result: PaymentMethodState[] = []; + const result: PaymentMethodState[] = []; if (initConfig.bankCard) { result.push({ name: PaymentMethodNameState.BankCard }); } diff --git a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/filter-by-payment-method-providers.ts b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/filter-by-payment-method-providers.ts index 9a5def2a..f9213c36 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/filter-by-payment-method-providers.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/filter-by-payment-method-providers.ts @@ -1,7 +1,10 @@ import { ServiceProvider } from 'checkout/backend'; -const findByID = ({ id }: ServiceProvider) => (providerID: string) => providerID === id; +const findByID = + ({ id }: ServiceProvider) => + (providerID: string) => + providerID === id; -export const filterByPaymentMethodProviders = (paymentMethodProviderIDs: string[]) => ( - serviceProvider: ServiceProvider -) => paymentMethodProviderIDs.find(findByID(serviceProvider)); +export const filterByPaymentMethodProviders = + (paymentMethodProviderIDs: string[]) => (serviceProvider: ServiceProvider) => + paymentMethodProviderIDs.find(findByID(serviceProvider)); diff --git a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-digital-wallet-payment-methods.ts b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-digital-wallet-payment-methods.ts index 3fdb8ebd..24055fee 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-digital-wallet-payment-methods.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-digital-wallet-payment-methods.ts @@ -1,19 +1,20 @@ -import groupBy from 'checkout/utils/group-by'; import { DigitalWallet, METADATA_NAMESPACE, ServiceProvider } from 'checkout/backend'; +import { assertUnreachable } from 'checkout/utils'; +import groupBy from 'checkout/utils/group-by'; + +import { filterByPaymentMethodProviders } from './filter-by-payment-method-providers'; import { DigitalWalletPaymentMethod, PaymentMethodName as PaymentMethodNameState, - KnownDigitalWalletProviderCategories + KnownDigitalWalletProviderCategories, } from '../types'; -import { assertUnreachable } from 'checkout/utils'; -import { filterByPaymentMethodProviders } from './filter-by-payment-method-providers'; const metadataReducer = (result: ServiceProvider[], serviceProvider: ServiceProvider): ServiceProvider[] => serviceProvider?.metadata?.[METADATA_NAMESPACE] ? result.concat(serviceProvider) : result; const categoryReducer = ( result: ServiceProvider[], - [category, serviceProviders]: [KnownDigitalWalletProviderCategories, ServiceProvider[]] + [category, serviceProviders]: [KnownDigitalWalletProviderCategories, ServiceProvider[]], ): ServiceProvider[] => { switch (category) { case KnownDigitalWalletProviderCategories.DigitalWallet: @@ -30,7 +31,7 @@ export const getDigitalWalletPaymentMethods = ( serviceProviders: ServiceProvider[], isMethod: boolean, paymentFlowHold: boolean, - recurring: boolean + recurring: boolean, ): DigitalWalletPaymentMethod[] => { if (!isMethod) { return []; @@ -47,7 +48,7 @@ export const getDigitalWalletPaymentMethods = ( return [ { name: PaymentMethodNameState.DigitalWallet, - serviceProviders: reduced - } + serviceProviders: reduced, + }, ]; }; diff --git a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-terminals-payment-methods.ts b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-terminals-payment-methods.ts index 744de78d..66c5ab89 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-terminals-payment-methods.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/get-payment-methods/get-terminals-payment-methods.ts @@ -1,8 +1,9 @@ -import groupBy from 'checkout/utils/group-by'; -import { KnownProviderCategories, PaymentMethod, PaymentMethodName } from '../types'; import { PaymentTerminal, ServiceProvider } from 'checkout/backend'; import { assertUnreachable } from 'checkout/utils'; +import groupBy from 'checkout/utils/group-by'; + import { filterByPaymentMethodProviders } from './filter-by-payment-method-providers'; +import { KnownProviderCategories, PaymentMethod, PaymentMethodName } from '../types'; interface InitConfigChunk { onlineBanking: boolean; @@ -14,54 +15,53 @@ interface InitConfigChunk { recurring: boolean; } -const categoryReducer = ({ onlineBanking, netBanking, upi, terminalWallets, pix }: Partial) => ( - result: PaymentMethod[], - [category, serviceProviders]: [KnownProviderCategories, ServiceProvider[]] -) => { - const paymentMethod = { - name: PaymentMethodName.PaymentTerminal, - category, - serviceProviders +const categoryReducer = + ({ onlineBanking, netBanking, upi, terminalWallets, pix }: Partial) => + (result: PaymentMethod[], [category, serviceProviders]: [KnownProviderCategories, ServiceProvider[]]) => { + const paymentMethod = { + name: PaymentMethodName.PaymentTerminal, + category, + serviceProviders, + }; + switch (category) { + case KnownProviderCategories.OnlineBanking: + if (onlineBanking) { + result = result.concat([paymentMethod]); + } + break; + case KnownProviderCategories.NetBanking: + if (netBanking) { + result = result.concat([paymentMethod]); + } + break; + case KnownProviderCategories.UPI: + if (upi) { + result = result.concat([paymentMethod]); + } + break; + case KnownProviderCategories.DigitalWallet: + if (terminalWallets) { + result = result.concat([paymentMethod]); + } + break; + case KnownProviderCategories.PIX: + if (pix) { + result = result.concat([paymentMethod]); + } + break; + case KnownProviderCategories.PaymentTerminal: + result = result.concat([paymentMethod]); + break; + default: + assertUnreachable(category); + } + return result; }; - switch (category) { - case KnownProviderCategories.OnlineBanking: - if (onlineBanking) { - result = result.concat([paymentMethod]); - } - break; - case KnownProviderCategories.NetBanking: - if (netBanking) { - result = result.concat([paymentMethod]); - } - break; - case KnownProviderCategories.UPI: - if (upi) { - result = result.concat([paymentMethod]); - } - break; - case KnownProviderCategories.DigitalWallet: - if (terminalWallets) { - result = result.concat([paymentMethod]); - } - break; - case KnownProviderCategories.PIX: - if (pix) { - result = result.concat([paymentMethod]); - } - break; - case KnownProviderCategories.PaymentTerminal: - result = result.concat([paymentMethod]); - break; - default: - assertUnreachable(category); - } - return result; -}; export const getTerminalsPaymentMethods = ( { providers }: PaymentTerminal, serviceProviders: ServiceProvider[], - { paymentFlowHold, recurring, onlineBanking, netBanking, upi, terminalWallets, pix }: InitConfigChunk + { paymentFlowHold, recurring, onlineBanking, netBanking, upi, terminalWallets, pix }: InitConfigChunk, ): PaymentMethod[] => { if (paymentFlowHold) { return []; @@ -71,5 +71,14 @@ export const getTerminalsPaymentMethods = ( } const filtered = serviceProviders.filter(filterByPaymentMethodProviders(providers)); const groupedByCategory = Object.entries(groupBy(filtered, 'category')); - return groupedByCategory.reduce(categoryReducer({ onlineBanking, netBanking, upi, terminalWallets, pix }), []); + return groupedByCategory.reduce( + categoryReducer({ + onlineBanking, + netBanking, + upi, + terminalWallets, + pix, + }), + [], + ); }; diff --git a/src/app/hooks/init-app/init-available-payment-methods/init-available-payment-methods.ts b/src/app/hooks/init-app/init-available-payment-methods/init-available-payment-methods.ts index 6a2a0350..f666bcbf 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/init-available-payment-methods.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/init-available-payment-methods.ts @@ -1,6 +1,7 @@ import { InitConfig } from 'checkout/config'; -import { toAvailablePaymentMethods } from './to-available-payment-methods'; + import { setPriority } from './set-priority'; +import { toAvailablePaymentMethods } from './to-available-payment-methods'; import { Model } from '..'; export const initAvailablePaymentMethods = (initConfig: InitConfig, { paymentMethods, serviceProviders }: Model) => { diff --git a/src/app/hooks/init-app/init-available-payment-methods/set-priority.ts b/src/app/hooks/init-app/init-available-payment-methods/set-priority.ts index 33ba2147..8fa35065 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/set-priority.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/set-priority.ts @@ -1,6 +1,7 @@ -import { KnownProviderCategories, PaymentMethod, PaymentMethodName, PaymentTerminalPaymentMethod } from './types'; import { assertUnreachable } from 'checkout/utils'; +import { KnownProviderCategories, PaymentMethod, PaymentMethodName, PaymentTerminalPaymentMethod } from './types'; + const getPriority = (method: PaymentMethod): number => { switch (method.name) { case PaymentMethodName.BankCard: @@ -23,6 +24,7 @@ const getPriority = (method: PaymentMethod): number => { default: assertUnreachable(category); } + break; case PaymentMethodName.DigitalWallet: return 8; default: @@ -33,5 +35,5 @@ const getPriority = (method: PaymentMethod): number => { export const setPriority = (methods: PaymentMethod[]): PaymentMethod[] => methods.map((method) => ({ ...method, - priority: getPriority(method) + priority: getPriority(method), })); diff --git a/src/app/hooks/init-app/init-available-payment-methods/terminal-digital-wallet-reducer.ts b/src/app/hooks/init-app/init-available-payment-methods/terminal-digital-wallet-reducer.ts index a27fc831..26a149be 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/terminal-digital-wallet-reducer.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/terminal-digital-wallet-reducer.ts @@ -1,17 +1,18 @@ +import isNil from 'checkout/utils/is-nil'; + import { DigitalWalletPaymentMethod, KnownProviderCategories, PaymentMethod, PaymentMethodName, - PaymentTerminalPaymentMethod + PaymentTerminalPaymentMethod, } from './types'; -import isNil from 'checkout/utils/is-nil'; export const terminalDigitalWalletReducer = ( acc: PaymentMethod[], curr: PaymentMethod, _index, - methods: PaymentMethod[] + methods: PaymentMethod[], ) => { if (curr.name === PaymentMethodName.PaymentTerminal) { const paymentTerminal = curr as PaymentTerminalPaymentMethod; @@ -25,7 +26,7 @@ export const terminalDigitalWalletReducer = ( if (curr.name === PaymentMethodName.DigitalWallet) { const digitalWallet = curr as DigitalWalletPaymentMethod; const paymentTerminal = methods.find( - (m) => m.name === PaymentMethodName.PaymentTerminal + (m) => m.name === PaymentMethodName.PaymentTerminal, ) as PaymentTerminalPaymentMethod; if (!isNil(paymentTerminal) && paymentTerminal.category === KnownProviderCategories.DigitalWallet) { digitalWallet.serviceProviders = digitalWallet.serviceProviders.concat(paymentTerminal.serviceProviders); diff --git a/src/app/hooks/init-app/init-available-payment-methods/to-available-payment-methods.ts b/src/app/hooks/init-app/init-available-payment-methods/to-available-payment-methods.ts index 9ff7b885..fdb06394 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/to-available-payment-methods.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/to-available-payment-methods.ts @@ -1,15 +1,16 @@ -import { PaymentMethod as PaymentMethodState } from './types'; import { DigitalWallet, PaymentMethod, PaymentMethodName, PaymentTerminal, ServiceProvider } from 'checkout/backend'; import { InitConfig } from 'checkout/config'; +import { assertUnreachable } from 'checkout/utils'; + import { bankCardToMethods } from './bank-card-to-methods'; import { getDigitalWalletPaymentMethods, getTerminalsPaymentMethods } from './get-payment-methods'; -import { assertUnreachable } from 'checkout/utils'; import { terminalDigitalWalletReducer } from './terminal-digital-wallet-reducer'; +import { PaymentMethod as PaymentMethodState } from './types'; export function toAvailablePaymentMethods( paymentMethods: PaymentMethod[], initConfig: InitConfig, - serviceProviders: ServiceProvider[] + serviceProviders: ServiceProvider[], ): PaymentMethodState[] { let result: PaymentMethodState[] = []; const { wallets, onlineBanking, netBanking, upi, terminalWallets, paymentFlowHold, recurring, pix } = initConfig; @@ -26,8 +27,8 @@ export function toAvailablePaymentMethods( serviceProviders, wallets, paymentFlowHold, - recurring - ) + recurring, + ), ); break; case PaymentMethodName.PaymentTerminal: @@ -39,8 +40,8 @@ export function toAvailablePaymentMethods( terminalWallets, paymentFlowHold, recurring, - pix - }) + pix, + }), ); break; default: diff --git a/src/app/hooks/init-app/init-available-payment-methods/types/digital-wallet-payment-method.ts b/src/app/hooks/init-app/init-available-payment-methods/types/digital-wallet-payment-method.ts index c62f8122..f880d88a 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/types/digital-wallet-payment-method.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/types/digital-wallet-payment-method.ts @@ -1,4 +1,5 @@ import { ServiceProvider } from 'checkout/backend'; + import { PaymentMethod } from './payment-method'; export interface DigitalWalletPaymentMethod extends PaymentMethod { diff --git a/src/app/hooks/init-app/init-available-payment-methods/types/known-digital-wallet-provider-categories.ts b/src/app/hooks/init-app/init-available-payment-methods/types/known-digital-wallet-provider-categories.ts index 9dce4150..5baa94b3 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/types/known-digital-wallet-provider-categories.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/types/known-digital-wallet-provider-categories.ts @@ -1,3 +1,3 @@ export enum KnownDigitalWalletProviderCategories { - DigitalWallet = 'digitalwallet' + DigitalWallet = 'digitalwallet', } diff --git a/src/app/hooks/init-app/init-available-payment-methods/types/known-provider-categories.ts b/src/app/hooks/init-app/init-available-payment-methods/types/known-provider-categories.ts index 902f9088..e94522c7 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/types/known-provider-categories.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/types/known-provider-categories.ts @@ -4,5 +4,5 @@ export enum KnownProviderCategories { UPI = 'upi', DigitalWallet = 'digitalwallet', PIX = 'pix', - PaymentTerminal = 'paymentterminal' + PaymentTerminal = 'paymentterminal', } diff --git a/src/app/hooks/init-app/init-available-payment-methods/types/payment-method-name.ts b/src/app/hooks/init-app/init-available-payment-methods/types/payment-method-name.ts index 6b257fb5..78a5948c 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/types/payment-method-name.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/types/payment-method-name.ts @@ -1,5 +1,5 @@ export enum PaymentMethodName { BankCard = 'BankCard', DigitalWallet = 'DigitalWallet', - PaymentTerminal = 'PaymentTerminal' + PaymentTerminal = 'PaymentTerminal', } diff --git a/src/app/hooks/init-app/init-available-payment-methods/types/payment-terminal-payment-method.ts b/src/app/hooks/init-app/init-available-payment-methods/types/payment-terminal-payment-method.ts index da836c19..8245821b 100644 --- a/src/app/hooks/init-app/init-available-payment-methods/types/payment-terminal-payment-method.ts +++ b/src/app/hooks/init-app/init-available-payment-methods/types/payment-terminal-payment-method.ts @@ -1,4 +1,5 @@ import { ServiceProvider } from 'checkout/backend'; + import { KnownProviderCategories } from './known-provider-categories'; import { PaymentMethod } from './payment-method'; import { PaymentMethodName } from './payment-method-name'; diff --git a/src/app/hooks/init-app/types.ts b/src/app/hooks/init-app/types.ts index 7545ebc8..6d5c185a 100644 --- a/src/app/hooks/init-app/types.ts +++ b/src/app/hooks/init-app/types.ts @@ -3,10 +3,11 @@ import { Invoice, InvoiceTemplate, ServiceProvider, - PaymentMethod as ApiPaymentMethod + PaymentMethod as ApiPaymentMethod, } from 'checkout/backend'; import { InitConfig } from 'checkout/config'; import { Locale } from 'checkout/locale'; + import { AmountInfo } from './amount-info'; import { PaymentMethod } from './init-available-payment-methods'; diff --git a/src/app/hooks/invoice-events/poll-invoice-events.spec.ts b/src/app/hooks/invoice-events/poll-invoice-events.spec.ts index f3f3e395..25e26f68 100644 --- a/src/app/hooks/invoice-events/poll-invoice-events.spec.ts +++ b/src/app/hooks/invoice-events/poll-invoice-events.spec.ts @@ -1,10 +1,11 @@ import { InvoiceChangeType } from 'checkout/backend'; + import { pollInvoiceEvents } from './poll-invoice-events'; const fetchValueMock = (result, status = 200, ok = true) => ({ status, ok, - json: async () => result + json: async () => result, }); describe('pollInvoiceEvents', () => { @@ -17,8 +18,8 @@ describe('pollInvoiceEvents', () => { stopPollingTypes: [ InvoiceChangeType.InvoiceStatusChanged, InvoiceChangeType.PaymentStatusChanged, - InvoiceChangeType.PaymentInteractionRequested - ] + InvoiceChangeType.PaymentInteractionRequested, + ], }; const getEventsUrl = (capiEndpoint: string, invoiceID: string, eventID?: number, limit = 20) => { const eventIDParam = eventID ? `&eventID=${eventID}` : ''; @@ -35,7 +36,7 @@ describe('pollInvoiceEvents', () => { const delays = { pollingTimeout: 300, - apiMethodCall: 100 + apiMethodCall: 100, }; const result = await pollInvoiceEvents({ ...params, delays }); await delay(300); // for checking that after timeout there are no more api calls @@ -43,7 +44,7 @@ describe('pollInvoiceEvents', () => { expect(mockFetch).toHaveBeenCalledTimes(4); const expected = { - status: 'TIMEOUT' + status: 'TIMEOUT', }; expect(result).toStrictEqual(expected); }); @@ -56,23 +57,23 @@ describe('pollInvoiceEvents', () => { changes: [ { changeType: 'InvoiceCreated', - invoice: 'invoice mock' - } + invoice: 'invoice mock', + }, ], createdAt: '2023-05-25T17:31:57.248146Z', - id: 1 + id: 1, }, { changes: [ { changeType: 'PaymentStarted', - payment: 'payment mock' - } + payment: 'payment mock', + }, ], createdAt: '2023-05-25T17:31:58.442598Z', - id: 2 - } - ]) + id: 2, + }, + ]), ); mockFetch.mockResolvedValueOnce(fetchValueMock([])); mockFetch.mockResolvedValueOnce( @@ -82,19 +83,19 @@ describe('pollInvoiceEvents', () => { { changeType: 'PaymentInteractionRequested', paymentID: '1', - userInteraction: 'user interaction mock' - } + userInteraction: 'user interaction mock', + }, ], createdAt: '2023-05-25T17:32:01.601868Z', - id: 7 - } - ]) + id: 7, + }, + ]), ); global.fetch = mockFetch; const delays = { pollingTimeout: 100, - apiMethodCall: 10 + apiMethodCall: 10, }; const result = await pollInvoiceEvents({ ...params, delays }); @@ -109,8 +110,8 @@ describe('pollInvoiceEvents', () => { change: { changeType: 'PaymentInteractionRequested', paymentID: '1', - userInteraction: 'user interaction mock' - } + userInteraction: 'user interaction mock', + }, }; expect(result).toStrictEqual(expected); }); @@ -124,9 +125,9 @@ describe('pollInvoiceEvents', () => { { changes: ['someChange_01', 'someChange_02'], createdAt: '2023-05-25T17:31:58.442598Z', - id: 19 - } - ]) + id: 19, + }, + ]), ); mockFetch.mockResolvedValueOnce(fetchValueMock([])); mockFetch.mockResolvedValueOnce( @@ -138,21 +139,25 @@ describe('pollInvoiceEvents', () => { { changeType: 'PaymentInteractionRequested', paymentID: '1', - userInteraction: 'user interaction mock' - } + userInteraction: 'user interaction mock', + }, ], createdAt: '2023-05-25T17:32:01.601868Z', - id: 21 - } - ]) + id: 21, + }, + ]), ); global.fetch = mockFetch; const delays = { pollingTimeout: 100, - apiMethodCall: 10 + apiMethodCall: 10, }; - const result = await pollInvoiceEvents({ ...params, delays, ...{ eventID: 15 } }); + const result = await pollInvoiceEvents({ + ...params, + delays, + ...{ eventID: 15 }, + }); expect(mockFetch).toHaveBeenCalledTimes(3); expect(mockFetch).toHaveBeenCalledWith(getEventsUrl(capiEndpoint, invoiceID, 15), expect.any(Object)); @@ -165,8 +170,8 @@ describe('pollInvoiceEvents', () => { change: { changeType: 'PaymentInteractionRequested', paymentID: '1', - userInteraction: 'user interaction mock' - } + userInteraction: 'user interaction mock', + }, }; expect(result).toStrictEqual(expected); }); diff --git a/src/app/hooks/invoice-events/poll-invoice-events.ts b/src/app/hooks/invoice-events/poll-invoice-events.ts index d309186c..53248022 100644 --- a/src/app/hooks/invoice-events/poll-invoice-events.ts +++ b/src/app/hooks/invoice-events/poll-invoice-events.ts @@ -7,7 +7,7 @@ const GET_INVOICE_EVENTS_LIMIT = 20; const getChange = ( event: InvoiceEvent | undefined, - stopPollingChangeTypes: InvoiceChangeType[] + stopPollingChangeTypes: InvoiceChangeType[], ): InvoiceChange | undefined => { if (isNil(event) || isNil(event.changes)) { return undefined; @@ -28,7 +28,7 @@ const fetchEvents = async (params: PollInvoiceEventsParams, isStop: () => boolea invoiceAccessToken, invoiceID, GET_INVOICE_EVENTS_LIMIT, - eventID + eventID, ); const lastEvent = last(events); const change = getChange(lastEvent, stopPollingTypes); @@ -36,7 +36,7 @@ const fetchEvents = async (params: PollInvoiceEventsParams, isStop: () => boolea return { status: 'POLLED', eventID: lastEvent.id, - change + change, }; } if (isStop()) { @@ -74,7 +74,7 @@ export const pollInvoiceEvents = async (params: PollInvoiceEventsParams): Promis if (isNil(result)) { stopPolling = true; return { - status: 'TIMEOUT' + status: 'TIMEOUT', }; } return result; diff --git a/src/app/hooks/modal/provide-interaction.ts b/src/app/hooks/modal/provide-interaction.ts index 0397b54c..80c7961a 100644 --- a/src/app/hooks/modal/provide-interaction.ts +++ b/src/app/hooks/modal/provide-interaction.ts @@ -5,9 +5,9 @@ import { PaymentToolDetailsType, QrCodeDisplayRequest, Redirect, - ServiceProvider + ServiceProvider, } from 'checkout/backend'; -import { InteractionModel } from './types/interaction-model'; +import { getMetadata } from 'checkout/components/ui/metadata/utils/get-metadata'; import { EventInteractionObject, ModalForms, @@ -15,18 +15,19 @@ import { ModalInteractionType, ModalState, QrCodeInteractionFormInfo, - RedirectFormInfo + RedirectFormInfo, } from 'checkout/hooks'; import isNil from 'checkout/utils/is-nil'; -import { getMetadata } from 'checkout/components/ui/metadata/utils/get-metadata'; + +import { InteractionModel } from './types/interaction-model'; const toModalInteraction = (userInteraction: Redirect): ModalInteraction => new ModalInteraction( { type: ModalInteractionType.EventInteraction, - request: userInteraction.request + request: userInteraction.request, } as EventInteractionObject, - true + true, ); const providePaymentTerminalPaymentTool = (userInteraction: Redirect, serviceProvider: ServiceProvider) => { @@ -48,7 +49,7 @@ const provideRedirect = (userInteraction: Redirect, activeServiceProvider: Servi const provideQrCode = ( userInteraction: QrCodeDisplayRequest, - activeServiceProvider: ServiceProvider | null + activeServiceProvider: ServiceProvider | null, ): ModalForms => { let providerID = null; if (activeServiceProvider) { @@ -60,7 +61,7 @@ const provideQrCode = ( const getActiveServiceProvider = ( serviceProviders: ServiceProvider[], - paymentToolDetails: PaymentToolDetails + paymentToolDetails: PaymentToolDetails, ): ServiceProvider | null => { if (paymentToolDetails.detailsType === PaymentToolDetailsType.PaymentToolDetailsPaymentTerminal) { const provider = (paymentToolDetails as PaymentToolDetailsPaymentTerminal).provider; @@ -71,7 +72,7 @@ const getActiveServiceProvider = ( export const provideInteraction = ( serviceProviders: ServiceProvider[], - { paymentToolDetails, userInteraction }: InteractionModel + { paymentToolDetails, userInteraction }: InteractionModel, ): ModalState => { const activeServiceProvider = getActiveServiceProvider(serviceProviders, paymentToolDetails); switch (userInteraction.interactionType) { diff --git a/src/app/hooks/modal/to-initial-form.ts b/src/app/hooks/modal/to-initial-form.ts index 39afdc74..dbe1c0b5 100644 --- a/src/app/hooks/modal/to-initial-form.ts +++ b/src/app/hooks/modal/to-initial-form.ts @@ -3,8 +3,10 @@ import { KnownProviderCategories, PaymentMethod, PaymentMethodName, - PaymentTerminalPaymentMethod + PaymentTerminalPaymentMethod, } from 'checkout/hooks'; +import { assertUnreachable } from 'checkout/utils'; + import { CardFormInfo, FormInfo, @@ -12,9 +14,8 @@ import { NoAvailablePaymentMethodFormInfo, WalletProvidersFormInfo, PaymentTerminalFormInfo, - PaymentTerminalSelectorFormInfo + PaymentTerminalSelectorFormInfo, } from './types'; -import { assertUnreachable } from 'checkout/utils'; const toPaymentTerminalForms = ({ category, serviceProviders }: PaymentTerminalPaymentMethod) => { switch (category) { diff --git a/src/app/hooks/modal/to-initial-state.ts b/src/app/hooks/modal/to-initial-state.ts index 4fdcdddd..407860d6 100644 --- a/src/app/hooks/modal/to-initial-state.ts +++ b/src/app/hooks/modal/to-initial-state.ts @@ -1,7 +1,6 @@ -import { FormInfo, ModalForms, ModalState, NoAvailablePaymentMethodFormInfo, PaymentMethodsFormInfo } from './types'; - -import { PaymentMethod } from '../init-app'; import { toInitialForm } from './to-initial-form'; +import { FormInfo, ModalForms, ModalState, NoAvailablePaymentMethodFormInfo, PaymentMethodsFormInfo } from './types'; +import { PaymentMethod } from '../init-app'; const toInitialModal = (formInfo: FormInfo[]): ModalForms => new ModalForms(formInfo, true); diff --git a/src/app/hooks/modal/types/form-info/card-form-info.ts b/src/app/hooks/modal/types/form-info/card-form-info.ts index fb5351d7..0f2c281c 100644 --- a/src/app/hooks/modal/types/form-info/card-form-info.ts +++ b/src/app/hooks/modal/types/form-info/card-form-info.ts @@ -2,8 +2,6 @@ import { FormInfo, FormName } from './form-info'; import { PaymentStatus } from './payment-status'; export class CardFormInfo extends FormInfo { - paymentStatus: PaymentStatus; - constructor(previous?: FormName) { super(previous); this.name = FormName.cardForm; diff --git a/src/app/hooks/modal/types/form-info/form-info.ts b/src/app/hooks/modal/types/form-info/form-info.ts index cbcd3714..17a5a64b 100644 --- a/src/app/hooks/modal/types/form-info/form-info.ts +++ b/src/app/hooks/modal/types/form-info/form-info.ts @@ -1,5 +1,5 @@ -import { Named } from '../named'; import { PaymentStatus } from './payment-status'; +import { Named } from '../named'; export enum FormName { paymentMethods = 'paymentMethods', @@ -11,7 +11,7 @@ export enum FormName { redirectForm = 'redirectForm', paymentTerminalForm = 'paymentTerminalForm', paymentTerminalSelector = 'paymentTerminalSelector', - qrCodeInteractionForm = 'qrCodeInteractionForm' + qrCodeInteractionForm = 'qrCodeInteractionForm', } export abstract class FormInfo implements Named { diff --git a/src/app/hooks/modal/types/form-info/form-view-info.ts b/src/app/hooks/modal/types/form-info/form-view-info.ts index 72c5ad05..7d626cbf 100644 --- a/src/app/hooks/modal/types/form-info/form-view-info.ts +++ b/src/app/hooks/modal/types/form-info/form-view-info.ts @@ -1,7 +1,7 @@ export enum SlideDirection { right = 'slideRightAnimation', left = 'slideLeftAnimation', - none = 'none' + none = 'none', } export interface FormViewInfo { diff --git a/src/app/hooks/modal/types/form-info/payment-status.ts b/src/app/hooks/modal/types/form-info/payment-status.ts index 13fa113f..62db33f5 100644 --- a/src/app/hooks/modal/types/form-info/payment-status.ts +++ b/src/app/hooks/modal/types/form-info/payment-status.ts @@ -1,5 +1,5 @@ export enum PaymentStatus { pristine = 'pristine', started = 'started', - needRetry = 'needRetry' + needRetry = 'needRetry', } diff --git a/src/app/hooks/modal/types/form-info/payment-terminal-form-info.ts b/src/app/hooks/modal/types/form-info/payment-terminal-form-info.ts index f7c42e72..cdce8d3c 100644 --- a/src/app/hooks/modal/types/form-info/payment-terminal-form-info.ts +++ b/src/app/hooks/modal/types/form-info/payment-terminal-form-info.ts @@ -6,7 +6,10 @@ export class PaymentTerminalFormInfo extends FormInfo { active = true; paymentStatus = PaymentStatus.pristine; - constructor(public providerID: string, previous?: FormName) { + constructor( + public providerID: string, + previous?: FormName, + ) { super(previous); } } diff --git a/src/app/hooks/modal/types/form-info/payment-terminal-selector-form-info.ts b/src/app/hooks/modal/types/form-info/payment-terminal-selector-form-info.ts index 44875a81..45a58022 100644 --- a/src/app/hooks/modal/types/form-info/payment-terminal-selector-form-info.ts +++ b/src/app/hooks/modal/types/form-info/payment-terminal-selector-form-info.ts @@ -1,11 +1,15 @@ import { KnownProviderCategories } from 'checkout/hooks'; + import { FormInfo, FormName } from './form-info'; export class PaymentTerminalSelectorFormInfo extends FormInfo { name = FormName.paymentTerminalSelector; active = true; - constructor(public category: KnownProviderCategories, previous?: FormName) { + constructor( + public category: KnownProviderCategories, + previous?: FormName, + ) { super(previous); } } diff --git a/src/app/hooks/modal/types/form-info/qr-code-interaction-form-info.ts b/src/app/hooks/modal/types/form-info/qr-code-interaction-form-info.ts index 71b864b1..d477f1e0 100644 --- a/src/app/hooks/modal/types/form-info/qr-code-interaction-form-info.ts +++ b/src/app/hooks/modal/types/form-info/qr-code-interaction-form-info.ts @@ -1,8 +1,12 @@ import { QrCodeDisplayRequest } from 'checkout/backend'; + import { FormInfo, FormName } from './form-info'; export class QrCodeInteractionFormInfo extends FormInfo { - constructor(public request: QrCodeDisplayRequest, public providerID: string) { + constructor( + public request: QrCodeDisplayRequest, + public providerID: string, + ) { super(); this.name = FormName.qrCodeInteractionForm; this.active = true; diff --git a/src/app/hooks/modal/types/form-info/redirect-form-info.ts b/src/app/hooks/modal/types/form-info/redirect-form-info.ts index 476ef3e0..c2396512 100644 --- a/src/app/hooks/modal/types/form-info/redirect-form-info.ts +++ b/src/app/hooks/modal/types/form-info/redirect-form-info.ts @@ -1,4 +1,5 @@ import { BrowserRequest } from 'checkout/backend'; + import { FormInfo, FormName } from '../form-info'; export class RedirectFormInfo extends FormInfo { diff --git a/src/app/hooks/modal/types/form-info/result-form-info.ts b/src/app/hooks/modal/types/form-info/result-form-info.ts index f87ae6ff..c823d4aa 100644 --- a/src/app/hooks/modal/types/form-info/result-form-info.ts +++ b/src/app/hooks/modal/types/form-info/result-form-info.ts @@ -1,10 +1,11 @@ import { InvoiceChange } from 'checkout/backend'; + import { FormInfo, FormName } from '../form-info'; export enum ResultType { hookError = 'hookError', hookProcessed = 'hookProcessed', - hookTimeout = 'hookTimeout' + hookTimeout = 'hookTimeout', } export type HookPayload = { diff --git a/src/app/hooks/modal/types/form-info/wallet-form-info.ts b/src/app/hooks/modal/types/form-info/wallet-form-info.ts index 21e2f5a9..deea1216 100644 --- a/src/app/hooks/modal/types/form-info/wallet-form-info.ts +++ b/src/app/hooks/modal/types/form-info/wallet-form-info.ts @@ -1,9 +1,9 @@ import { ServiceProvider } from 'checkout/backend'; + import { FormInfo, FormName } from './form-info'; import { PaymentStatus } from './payment-status'; export class WalletFormInfo extends FormInfo { - paymentStatus: PaymentStatus; activeProvider: ServiceProvider; constructor(activeProvider: ServiceProvider, previous?: FormName) { diff --git a/src/app/hooks/modal/types/modal-forms.ts b/src/app/hooks/modal/types/modal-forms.ts index aa391ee1..8035f10f 100644 --- a/src/app/hooks/modal/types/modal-forms.ts +++ b/src/app/hooks/modal/types/modal-forms.ts @@ -1,18 +1,18 @@ -import { ModalName, ModalState } from './modal-state'; -import { FormInfo, FormViewInfo, SlideDirection } from './form-info'; - -export class ModalForms extends ModalState { - formsInfo: FormInfo[]; - viewInfo: FormViewInfo; - - constructor(formsInfo: FormInfo[], active: boolean, inProcess = false) { - super(); - this.name = ModalName.modalForms; - this.viewInfo = { - slideDirection: SlideDirection.none, - inProcess - }; - this.formsInfo = formsInfo; - this.active = active; - } -} +import { FormInfo, FormViewInfo, SlideDirection } from './form-info'; +import { ModalName, ModalState } from './modal-state'; + +export class ModalForms extends ModalState { + formsInfo: FormInfo[]; + viewInfo: FormViewInfo; + + constructor(formsInfo: FormInfo[], active: boolean, inProcess = false) { + super(); + this.name = ModalName.modalForms; + this.viewInfo = { + slideDirection: SlideDirection.none, + inProcess, + }; + this.formsInfo = formsInfo; + this.active = active; + } +} diff --git a/src/app/hooks/modal/types/modal-interaction.ts b/src/app/hooks/modal/types/modal-interaction.ts index 22c7c207..71651374 100644 --- a/src/app/hooks/modal/types/modal-interaction.ts +++ b/src/app/hooks/modal/types/modal-interaction.ts @@ -1,9 +1,10 @@ -import { ModalName, ModalState } from './modal-state'; import { BrowserRequest } from 'checkout/backend'; +import { ModalName, ModalState } from './modal-state'; + export enum ModalInteractionType { TokenizedInteraction = 'TokenizedInteraction', - EventInteraction = 'EventInteraction' + EventInteraction = 'EventInteraction', } interface InteractionObject { diff --git a/src/app/hooks/modal/types/modal-state.ts b/src/app/hooks/modal/types/modal-state.ts index 6be6f1f5..92e29ab5 100644 --- a/src/app/hooks/modal/types/modal-state.ts +++ b/src/app/hooks/modal/types/modal-state.ts @@ -2,7 +2,7 @@ import { Named } from './named'; export enum ModalName { modalInteraction = 'modalInteraction', - modalForms = 'modalForms' + modalForms = 'modalForms', } export abstract class ModalState implements Named { diff --git a/src/app/hooks/use-create-payment.ts b/src/app/hooks/use-create-payment.ts index aa70947b..e7f3da16 100644 --- a/src/app/hooks/use-create-payment.ts +++ b/src/app/hooks/use-create-payment.ts @@ -1,9 +1,9 @@ import { useContext, useCallback, useReducer } from 'react'; import isNil from 'checkout/utils/is-nil'; + import { createInvoiceWithTemplate, createPayment } from './create-payment'; import { FormData } from './create-payment'; - import { InitialContext } from '../components/app/initial-context'; import { PayableInvoiceContext } from '../components/app/modal-container/payable-invoice-context'; @@ -16,13 +16,13 @@ const dataReducer = (state: State, action: Action): State => { case 'CREATE_PAYMENT_SUCCESS': return { ...state, - status: 'SUCCESS' + status: 'SUCCESS', }; case 'CREATE_PAYMENT_FAILURE': return { ...state, status: 'FAILURE', - error: action.error + error: action.error, }; } }; @@ -33,12 +33,12 @@ export const useCreatePayment = () => { appConfig, model: { invoiceTemplate }, amountInfo, - origin + origin, } = useContext(InitialContext); const { payableInvoiceData, setPayableInvoiceData } = useContext(PayableInvoiceContext); const [createPaymentState, dispatch] = useReducer(dataReducer, { - status: 'PRISTINE' + status: 'PRISTINE', }); const setFormData = useCallback( @@ -52,7 +52,7 @@ export const useCreatePayment = () => { invoiceTemplateAccessToken: initConfig.invoiceTemplateAccessToken, invoiceTemplate, amountInfo, - formAmount: formData.values?.amount + formAmount: formData.values?.amount, }); setPayableInvoiceData(data); } @@ -69,10 +69,10 @@ export const useCreatePayment = () => { holdExpiration: initConfig.holdExpiration, recurring: initConfig.recurring, metadata: initConfig.metadata, - isExternalIDIncluded: initConfig.isExternalIDIncluded + isExternalIDIncluded: initConfig.isExternalIDIncluded, }, formData, - payableInvoice: data + payableInvoice: data, }); dispatch({ type: 'CREATE_PAYMENT_SUCCESS' }); } catch (error) { @@ -82,7 +82,7 @@ export const useCreatePayment = () => { }; fetchData(); }, - [payableInvoiceData] + [payableInvoiceData], ); return { createPaymentState, setFormData }; diff --git a/src/app/hooks/use-init-app.test.ts b/src/app/hooks/use-init-app.test.ts index 3bcf0b42..9d898b0e 100644 --- a/src/app/hooks/use-init-app.test.ts +++ b/src/app/hooks/use-init-app.test.ts @@ -1,17 +1,18 @@ import { act, renderHook } from '@testing-library/react'; -import { useInitApp } from './use-init-app'; import { PaymentMethodName } from 'checkout/backend'; +import { useInitApp } from './use-init-app'; + const fetchMock = (result, status = 200, ok = true) => Promise.resolve({ status, ok, - json: () => Promise.resolve(result) + json: () => Promise.resolve(result), }); const getLocaleMock = fetchMock({ - 'mock.locale.key': 'Mock locale value' + 'mock.locale.key': 'Mock locale value', }); describe('useInitApp', () => { @@ -20,8 +21,8 @@ describe('useInitApp', () => { category: 'onlinebanking', id: 'providerID_001', metadata: { - 'dev.vality.checkout': {} - } + 'dev.vality.checkout': {}, + }, }); const getServiceProviderByIdMock_002 = fetchMock({ @@ -29,31 +30,35 @@ describe('useInitApp', () => { category: 'pix', id: 'providerID_002', metadata: { - 'dev.vality.checkout': {} - } + 'dev.vality.checkout': {}, + }, }); describe('init with invoice template', () => { const getInvoiceTemplateMock = fetchMock({ createdAt: '2023-05-10T08:34:22.263596Z', details: { - price: { amount: 100, costType: 'InvoiceTemplateLineCostFixed', currency: 'USD' }, + price: { + amount: 100, + costType: 'InvoiceTemplateLineCostFixed', + currency: 'USD', + }, product: 'test', - templateType: 'InvoiceTemplateSingleLine' + templateType: 'InvoiceTemplateSingleLine', }, id: '1n1ELRnJcBP', lifetime: { days: 21, months: 5, years: 0 }, - shopID: '000rrrrr-0000-0000-0000-45388402c928' + shopID: '000rrrrr-0000-0000-0000-45388402c928', }); const getInvoicePaymentMethodsByTemplateIdMock = fetchMock([ { - method: PaymentMethodName.BankCard + method: PaymentMethodName.BankCard, }, { method: PaymentMethodName.PaymentTerminal, - providers: ['providerID_001', 'providerID_002'] - } + providers: ['providerID_001', 'providerID_002'], + }, ]); test('should success init', async () => { @@ -82,7 +87,7 @@ describe('useInitApp', () => { await act(async () => result.current.init({ appConfig: { - capiEndpoint: 'https://api.test.com' + capiEndpoint: 'https://api.test.com', }, initConfig: { integrationType: 'invoiceTemplate', @@ -91,10 +96,10 @@ describe('useInitApp', () => { locale: 'en', bankCard: true, onlineBanking: true, - pix: true + pix: true, }, - origin: 'https://checkout.test.com' - }) + origin: 'https://checkout.test.com', + }), ); const state = result.current.state; expect(state.status).toBe('SUCCESS'); @@ -108,7 +113,7 @@ describe('useInitApp', () => { locale: 'en', bankCard: true, onlineBanking: true, - pix: true + pix: true, }, appConfig: { capiEndpoint: 'https://api.test.com' }, origin: 'https://checkout.test.com', @@ -116,35 +121,47 @@ describe('useInitApp', () => { model: { paymentMethods: [ { method: 'BankCard' }, - { method: 'PaymentTerminal', providers: ['providerID_001', 'providerID_002'] } + { + method: 'PaymentTerminal', + providers: ['providerID_001', 'providerID_002'], + }, ], invoiceTemplate: { createdAt: '2023-05-10T08:34:22.263596Z', details: { - price: { amount: 100, costType: 'InvoiceTemplateLineCostFixed', currency: 'USD' }, + price: { + amount: 100, + costType: 'InvoiceTemplateLineCostFixed', + currency: 'USD', + }, product: 'test', - templateType: 'InvoiceTemplateSingleLine' + templateType: 'InvoiceTemplateSingleLine', }, id: '1n1ELRnJcBP', lifetime: { days: 21, months: 5, years: 0 }, - shopID: '000rrrrr-0000-0000-0000-45388402c928' + shopID: '000rrrrr-0000-0000-0000-45388402c928', }, serviceProviders: [ { brandName: 'Provider Brand Name 1', category: 'onlinebanking', id: 'providerID_001', - metadata: { 'dev.vality.checkout': {} } + metadata: { 'dev.vality.checkout': {} }, }, { brandName: 'Provider Brand Name 2', category: 'pix', id: 'providerID_002', - metadata: { 'dev.vality.checkout': {} } - } - ] + metadata: { 'dev.vality.checkout': {} }, + }, + ], + }, + amountInfo: { + status: 'final', + minorValue: 100, + currencyCode: 'USD', + locale: 'en', }, - amountInfo: { status: 'final', minorValue: 100, currencyCode: 'USD', locale: 'en' }, availablePaymentMethods: [ { name: 'BankCard', priority: 1 }, { @@ -155,10 +172,10 @@ describe('useInitApp', () => { brandName: 'Provider Brand Name 1', category: 'onlinebanking', id: 'providerID_001', - metadata: { 'dev.vality.checkout': {} } - } + metadata: { 'dev.vality.checkout': {} }, + }, ], - priority: 3 + priority: 3, }, { name: 'PaymentTerminal', @@ -168,12 +185,12 @@ describe('useInitApp', () => { brandName: 'Provider Brand Name 2', category: 'pix', id: 'providerID_002', - metadata: { 'dev.vality.checkout': {} } - } + metadata: { 'dev.vality.checkout': {} }, + }, ], - priority: 7 - } - ] + priority: 7, + }, + ], }; expect(state.data).toStrictEqual(expected); @@ -193,7 +210,7 @@ describe('useInitApp', () => { await act(async () => result.current.init({ appConfig: { - capiEndpoint: 'https://api.test.com' + capiEndpoint: 'https://api.test.com', }, initConfig: { integrationType: 'invoiceTemplate', @@ -202,16 +219,20 @@ describe('useInitApp', () => { locale: 'en', bankCard: true, onlineBanking: true, - pix: true + pix: true, }, - origin: 'https://checkout.test.com' - }) + origin: 'https://checkout.test.com', + }), ); const state = result.current.state; expect(state.status).toBe('FAILURE'); expect(errorSpy).toHaveBeenCalled(); if (state.status !== 'FAILURE') return; - expect(state.error).toStrictEqual({ details: errorMsg, status: 500, statusText: undefined }); + expect(state.error).toStrictEqual({ + details: errorMsg, + status: 500, + statusText: undefined, + }); }); }); @@ -227,19 +248,19 @@ describe('useInitApp', () => { metadata: {}, product: 'test', shopID: 'cb323cb7-2abc-4626-a786-b70d8abbd0ec', - status: 'unpaid' + status: 'unpaid', }; const getInvoiceMock = fetchMock(invoice); const getInvoicePaymentMethodsByTemplateIdMock = fetchMock([ { - method: PaymentMethodName.BankCard + method: PaymentMethodName.BankCard, }, { method: PaymentMethodName.PaymentTerminal, - providers: ['providerID_001', 'providerID_002'] - } + providers: ['providerID_001', 'providerID_002'], + }, ]); test('should success init', async () => { @@ -268,7 +289,7 @@ describe('useInitApp', () => { await act(async () => result.current.init({ appConfig: { - capiEndpoint: 'https://api.test.com' + capiEndpoint: 'https://api.test.com', }, initConfig: { integrationType: 'invoice', @@ -277,10 +298,10 @@ describe('useInitApp', () => { locale: 'en', bankCard: true, onlineBanking: true, - pix: true + pix: true, }, - origin: 'https://checkout.test.com' - }) + origin: 'https://checkout.test.com', + }), ); const state = result.current.state; expect(state.status).toBe('SUCCESS'); @@ -294,7 +315,7 @@ describe('useInitApp', () => { locale: 'en', bankCard: true, onlineBanking: true, - pix: true + pix: true, }, appConfig: { capiEndpoint: 'https://api.test.com' }, origin: 'https://checkout.test.com', @@ -302,11 +323,21 @@ describe('useInitApp', () => { model: { paymentMethods: [ { method: 'BankCard' }, - { method: 'PaymentTerminal', providers: ['providerID_001', 'providerID_002'] } + { + method: 'PaymentTerminal', + providers: ['providerID_001', 'providerID_002'], + }, ], invoice: { amount: 100000, - cart: [{ cost: 100000, price: 100000, product: 'test', quantity: 1 }], + cart: [ + { + cost: 100000, + price: 100000, + product: 'test', + quantity: 1, + }, + ], createdAt: '2023-05-11T12:14:44.001097Z', currency: 'RUB', description: '', @@ -315,25 +346,30 @@ describe('useInitApp', () => { metadata: {}, product: 'test', shopID: 'cb323cb7-2abc-4626-a786-b70d8abbd0ec', - status: 'unpaid' + status: 'unpaid', }, serviceProviders: [ { brandName: 'Provider Brand Name 1', category: 'onlinebanking', id: 'providerID_001', - metadata: { 'dev.vality.checkout': {} } + metadata: { 'dev.vality.checkout': {} }, }, { brandName: 'Provider Brand Name 2', category: 'pix', id: 'providerID_002', - metadata: { 'dev.vality.checkout': {} } - } + metadata: { 'dev.vality.checkout': {} }, + }, ], - invoiceAccessToken: 'eyJhbGciOiJ...' + invoiceAccessToken: 'eyJhbGciOiJ...', + }, + amountInfo: { + status: 'final', + minorValue: 100000, + currencyCode: 'RUB', + locale: 'en', }, - amountInfo: { status: 'final', minorValue: 100000, currencyCode: 'RUB', locale: 'en' }, availablePaymentMethods: [ { name: 'BankCard', priority: 1 }, { @@ -344,10 +380,10 @@ describe('useInitApp', () => { brandName: 'Provider Brand Name 1', category: 'onlinebanking', id: 'providerID_001', - metadata: { 'dev.vality.checkout': {} } - } + metadata: { 'dev.vality.checkout': {} }, + }, ], - priority: 3 + priority: 3, }, { name: 'PaymentTerminal', @@ -357,12 +393,12 @@ describe('useInitApp', () => { brandName: 'Provider Brand Name 2', category: 'pix', id: 'providerID_002', - metadata: { 'dev.vality.checkout': {} } - } + metadata: { 'dev.vality.checkout': {} }, + }, ], - priority: 7 - } - ] + priority: 7, + }, + ], }; expect(state.data).toStrictEqual(expected); diff --git a/src/app/hooks/use-init-app.ts b/src/app/hooks/use-init-app.ts index 57308ace..cef1f88b 100644 --- a/src/app/hooks/use-init-app.ts +++ b/src/app/hooks/use-init-app.ts @@ -1,6 +1,7 @@ import { useCallback, useReducer } from 'react'; import { InitParams } from 'checkout/initialize'; + import { InitialData, initApp } from './init-app'; type State = @@ -16,21 +17,21 @@ const dataFetchReducer = (state: State, action: Action): State => { return { ...state, status: 'SUCCESS', - data: action.payload + data: action.payload, }; case 'APP_INIT_FAILURE': return { ...state, status: 'FAILURE', error: action.error, - data: null + data: null, }; } }; export const useInitApp = () => { const [state, dispatch] = useReducer(dataFetchReducer, { - status: 'PRISTINE' + status: 'PRISTINE', }); const init = useCallback((initParams: InitParams) => { @@ -39,7 +40,7 @@ export const useInitApp = () => { const payload = await initApp(initParams); dispatch({ type: 'APP_INIT_SUCCESS', - payload + payload, }); } catch (error) { dispatch({ type: 'APP_INIT_FAILURE', error }); diff --git a/src/app/hooks/use-invoice-events.ts b/src/app/hooks/use-invoice-events.ts index 85c16692..223fb5d0 100644 --- a/src/app/hooks/use-invoice-events.ts +++ b/src/app/hooks/use-invoice-events.ts @@ -1,9 +1,11 @@ import { useCallback, useEffect, useReducer, useState } from 'react'; -import isNil from 'checkout/utils/is-nil'; -import { PayableInvoiceData } from './create-payment'; -import { PollingResult, pollInvoiceEvents } from './invoice-events'; + import { InvoiceChange, InvoiceChangeType, getInvoiceEvents } from 'checkout/backend'; import { findChange } from 'checkout/utils/event-utils'; +import isNil from 'checkout/utils/is-nil'; + +import { PayableInvoiceData } from './create-payment'; +import { PollingResult, pollInvoiceEvents } from './invoice-events'; const API_METHOD_CALL_MS = 1000; const DEFAULT_TIMEOUT_MS = 60 * 1000 * 10; @@ -27,28 +29,28 @@ const dataReducer = (_state: State, action: Action): State => { case 'SET_FAILURE': return { status: 'FAILURE', - error: action.error + error: action.error, }; case 'POLL_EVENTS_TIMEOUT': return { - status: 'POLLING_TIMEOUT' + status: 'POLLING_TIMEOUT', }; case 'SET_POLLING_RESULT': return { status: 'POLLING_SUCCESS', - payload: action.payload + payload: action.payload, }; case 'SET_SEARCH_RESULT': return { status: 'EVENT_CHANGE_FOUND', - payload: action.payload + payload: action.payload, }; } }; export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) => { const [eventsState, dispatch] = useReducer(dataReducer, { - status: 'PRISTINE' + status: 'PRISTINE', }); const [pollingResult, setPollingResult] = useState(null); @@ -66,13 +68,13 @@ export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) InvoiceChangeType.PaymentStarted, InvoiceChangeType.InvoiceStatusChanged, InvoiceChangeType.PaymentStatusChanged, - InvoiceChangeType.PaymentInteractionRequested + InvoiceChangeType.PaymentInteractionRequested, ], delays: { pollingTimeout, - apiMethodCall: API_METHOD_CALL_MS + apiMethodCall: API_METHOD_CALL_MS, }, - eventID + eventID, }); setPollingResult(pollingResult); } catch (error) { @@ -82,7 +84,7 @@ export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) }; fetchData(); }, - [capiEndpoint, data] + [capiEndpoint, data], ); useEffect(() => { @@ -97,7 +99,10 @@ export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) startPolling(pollingResult.eventID, PAYMENT_STARTED_TIMEOUT_MS); } else { startPolling(pollingResult.eventID); - dispatch({ type: 'SET_POLLING_RESULT', payload: pollingResult.change }); + dispatch({ + type: 'SET_POLLING_RESULT', + payload: pollingResult.change, + }); } break; } @@ -115,7 +120,7 @@ export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) } else { dispatch({ type: 'SET_FAILURE', - error: new Error(`Event change: "${foundType}" is not found`) + error: new Error(`Event change: "${foundType}" is not found`), }); } } catch (error) { @@ -125,7 +130,7 @@ export const useInvoiceEvents = (capiEndpoint: string, data: PayableInvoiceData) }; fetchData(); }, - [capiEndpoint, data] + [capiEndpoint, data], ); return { eventsState, startPolling, searchEventsChange }; diff --git a/src/app/hooks/use-modal.ts b/src/app/hooks/use-modal.ts index 8225fd7d..9135e29a 100644 --- a/src/app/hooks/use-modal.ts +++ b/src/app/hooks/use-modal.ts @@ -1,4 +1,11 @@ import { useCallback, useReducer } from 'react'; + +import { ServiceProvider } from 'checkout/backend'; +import { InitConfig } from 'checkout/config'; +import { findNamed } from 'checkout/utils'; + +import { PaymentMethod } from './init-app'; +import { InteractionModel, provideInteraction, toInitialState } from './modal'; import { FormInfo, ModalForms, @@ -7,20 +14,14 @@ import { Named, PaymentMethodsFormInfo, PaymentStatus, - SlideDirection + SlideDirection, } from './modal/types'; -import { PaymentMethod } from './init-app'; -import { InteractionModel, provideInteraction, toInitialState } from './modal'; -import { InitConfig } from 'checkout/config'; -import { findNamed } from 'checkout/utils'; -import { ServiceProvider } from 'checkout/backend'; - type State = ModalState[]; export enum Direction { back = 'back', - forward = 'forward' + forward = 'forward', } type Action = @@ -91,12 +92,12 @@ const updateFound = (s: ModalState[], found: ModalForms, formInfo: FormInfo, dir viewInfo: { ...found.viewInfo, inProcess: false, - slideDirection: toSlideDirection(direction) + slideDirection: toSlideDirection(direction), }, formsInfo: addOrUpdate(found.formsInfo, { ...formInfo, - active: true - } as FormInfo) + active: true, + } as FormInfo), } as ModalForms); }; @@ -114,8 +115,8 @@ const setActiveToPristine = (s: ModalState[]): ModalState[] => { ...modal, formsInfo: addOrUpdate(modal.formsInfo, { ...started, - paymentStatus: PaymentStatus.pristine - } as FormInfo) + paymentStatus: PaymentStatus.pristine, + } as FormInfo), } as ModalForms) : s; }; @@ -127,12 +128,12 @@ const prepareToPay = (s: ModalState[]): ModalState[] => { ...modal, viewInfo: { ...modal.viewInfo, - inProcess: true + inProcess: true, }, formsInfo: addOrUpdate(modal.formsInfo, { ...active, - paymentStatus: PaymentStatus.started - } as FormInfo) + paymentStatus: PaymentStatus.started, + } as FormInfo), } as ModalForms); }; @@ -142,8 +143,8 @@ const updateViewInfo = (s: ModalState[], field: string, value: any): ModalState[ ...modal, viewInfo: { ...modal.viewInfo, - [field]: value - } + [field]: value, + }, } as ModalForms); }; @@ -156,13 +157,13 @@ const prepareToRetry = (s: ModalState[], toPristine: boolean): ModalState[] => { ...modal, viewInfo: { ...modal.viewInfo, - slideDirection: SlideDirection.left + slideDirection: SlideDirection.left, }, formsInfo: addOrUpdate(modal.formsInfo, { ...started, paymentStatus: toPristine ? PaymentStatus.pristine : PaymentStatus.needRetry, - active: true - } as FormInfo) + active: true, + } as FormInfo), } as ModalForms); }; @@ -171,16 +172,16 @@ const forgetPaymentAttempt = (s: ModalState[]) => { const pristine = addOrUpdate(modal.formsInfo, { ...findStarted(modal.formsInfo), paymentStatus: PaymentStatus.pristine, - active: false + active: false, } as FormInfo); return addOrUpdate(s, { ...modal, viewInfo: { ...modal.viewInfo, slideDirection: SlideDirection.left, - inProcess: false + inProcess: false, }, - formsInfo: addOrUpdate(pristine, new PaymentMethodsFormInfo()) + formsInfo: addOrUpdate(pristine, new PaymentMethodsFormInfo()), } as ModalForms); }; @@ -223,11 +224,17 @@ export const useModal = ({ integrationType, availablePaymentMethods, serviceProv const [modalState, dispatch] = useReducer(dataReducer, init(integrationType, availablePaymentMethods)); const toInitialState = useCallback(() => { - dispatch({ type: 'TO_INITIAL_STATE', payload: availablePaymentMethods }); + dispatch({ + type: 'TO_INITIAL_STATE', + payload: availablePaymentMethods, + }); }, [availablePaymentMethods]); const goToFormInfo = useCallback((formInfo: FormInfo, direction: Direction = Direction.forward) => { - dispatch({ type: 'GO_TO_FORM_INFO', payload: { formInfo, direction } }); + dispatch({ + type: 'GO_TO_FORM_INFO', + payload: { formInfo, direction }, + }); }, []); const prepareToPay = useCallback(() => { @@ -248,9 +255,12 @@ export const useModal = ({ integrationType, availablePaymentMethods, serviceProv const toInteractionState = useCallback( (interactionModel: InteractionModel) => { - dispatch({ type: 'TO_INTERACTION_STATE', payload: provideInteraction(serviceProviders, interactionModel) }); + dispatch({ + type: 'TO_INTERACTION_STATE', + payload: provideInteraction(serviceProviders, interactionModel), + }); }, - [serviceProviders] + [serviceProviders], ); return { @@ -261,6 +271,6 @@ export const useModal = ({ integrationType, availablePaymentMethods, serviceProv prepareToRetry, forgetPaymentAttempt, setViewInfoError, - toInteractionState + toInteractionState, }; }; diff --git a/src/app/hooks/use-theme.test.ts b/src/app/hooks/use-theme.test.ts index a114572c..e0ae05ea 100644 --- a/src/app/hooks/use-theme.test.ts +++ b/src/app/hooks/use-theme.test.ts @@ -1,22 +1,23 @@ import { renderHook } from '@testing-library/react'; -import { useTheme } from './use-theme'; import { ThemeName } from 'checkout/themes'; import plantation from 'checkout/themes/plantation'; import rhino from 'checkout/themes/rhino'; +import { useTheme } from './use-theme'; + describe('useTheme', () => { test('should apply init config theme', () => { const { result } = renderHook(() => useTheme({ appConfig: { - fixedTheme: ThemeName.plantation + fixedTheme: ThemeName.plantation, }, initConfig: { - theme: 'rhino' + theme: 'rhino', }, - origin: '' - }) + origin: '', + }), ); expect(result.current).toStrictEqual(rhino); @@ -26,11 +27,11 @@ describe('useTheme', () => { const { result } = renderHook(() => useTheme({ appConfig: { - fixedTheme: ThemeName.plantation + fixedTheme: ThemeName.plantation, }, initConfig: {}, - origin: '' - }) + origin: '', + }), ); expect(result.current).toStrictEqual(plantation); @@ -41,8 +42,8 @@ describe('useTheme', () => { useTheme({ appConfig: {}, initConfig: {}, - origin: '' - }) + origin: '', + }), ); expect(result.current).toStrictEqual(plantation); @@ -53,10 +54,10 @@ describe('useTheme', () => { useTheme({ appConfig: {}, initConfig: { - theme: 'rhino' + theme: 'rhino', }, - origin: '' - }) + origin: '', + }), ); expect(result.current).toStrictEqual(rhino); diff --git a/src/app/hooks/use-theme.ts b/src/app/hooks/use-theme.ts index 10836519..8fbc1fbf 100644 --- a/src/app/hooks/use-theme.ts +++ b/src/app/hooks/use-theme.ts @@ -1,6 +1,7 @@ import { useMemo } from 'react'; -import { getTheme } from 'checkout/themes'; + import { InitParams } from 'checkout/initialize'; +import { getTheme } from 'checkout/themes'; export const useTheme = ({ appConfig, initConfig }: InitParams) => { const fixedThemeName = appConfig.fixedTheme; diff --git a/src/app/index.tsx b/src/app/index.tsx index 6d3ab801..8b9ff539 100644 --- a/src/app/index.tsx +++ b/src/app/index.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; +import React from 'react'; import { createRoot } from 'react-dom/client'; import { App } from './components/app'; import { initialize } from './initialize'; -import { CommunicatorEvents } from '../communicator'; import isNil from './utils/is-nil'; +import { CommunicatorEvents } from '../communicator'; const ON_COMPLETE_TIMEOUT_MS = 1000 * 5; @@ -12,19 +12,22 @@ initialize().then(([transport, initParams]) => { const container = document.getElementById('app'); const root = createRoot(container); root.render( - { - setTimeout(() => { - transport.emit(CommunicatorEvents.finished); - transport.destroy(); - const redirectUrl = initParams.initConfig.redirectUrl; - if (!isNil(redirectUrl)) { - window.open(redirectUrl, '_self'); - } - root.unmount(); - }, ON_COMPLETE_TIMEOUT_MS); - }} - /> + + { + setTimeout(() => { + transport.emit(CommunicatorEvents.finished); + transport.destroy(); + const redirectUrl = initParams.initConfig.redirectUrl; + if (!isNil(redirectUrl)) { + window.open(redirectUrl, '_self'); + } + root.unmount(); + }, ON_COMPLETE_TIMEOUT_MS); + }} + /> + , + , ); }); diff --git a/src/app/initialize.ts b/src/app/initialize.ts index e8454695..c3b2ec16 100644 --- a/src/app/initialize.ts +++ b/src/app/initialize.ts @@ -1,11 +1,12 @@ -import * as creditCardType from 'credit-card-type'; -import * as Sentry from '@sentry/react'; import { CaptureConsole as CaptureConsoleIntegration } from '@sentry/integrations'; +import * as Sentry from '@sentry/react'; +import * as creditCardType from 'credit-card-type'; -import { listen, Transport, StubTransport, CommunicatorEvents, communicatorInstanceName } from '../communicator'; -import { getUrlParams, URLParams } from 'checkout/utils'; import { InitConfig, resolveInitConfig } from 'checkout/config'; +import { getUrlParams, URLParams } from 'checkout/utils'; + import { AppConfig, getAppConfig, getEnv } from './backend'; +import { listen, Transport, StubTransport, CommunicatorEvents, communicatorInstanceName } from '../communicator'; import { getOrigin } from '../get-origin'; /** @@ -19,8 +20,8 @@ creditCardType.addCard({ lengths: [16], code: { name: 'CVV', - size: 3 - } + size: 3, + }, }); creditCardType.addCard({ @@ -31,8 +32,8 @@ creditCardType.addCard({ lengths: [16], code: { name: 'CVV', - size: 3 - } + size: 3, + }, }); const initSentry = async (dsn: string) => { @@ -43,14 +44,14 @@ const initSentry = async (dsn: string) => { integrations: [ new Sentry.BrowserTracing(), new CaptureConsoleIntegration({ - levels: ['warn', 'error'] + levels: ['warn', 'error'], }), - new Sentry.Replay() + new Sentry.Replay(), ], tracesSampleRate: 0.2, release: env.version, replaysOnErrorSampleRate: 1.0, - replaysSessionSampleRate: 0.1 + replaysSessionSampleRate: 0.1, }); }; @@ -85,8 +86,8 @@ export const initialize = async (): Promise<[Transport, InitParams]> => { { initConfig, appConfig, - origin - } + origin, + }, ]; } catch (e) { console.error(e); diff --git a/src/app/polyfills.ts b/src/app/polyfills.ts deleted file mode 100644 index 57a61eeb..00000000 --- a/src/app/polyfills.ts +++ /dev/null @@ -1,8 +0,0 @@ -if (!String.prototype.replaceAll) { - String.prototype.replaceAll = function(str, newStr) { - if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') { - return this.replace(str, newStr); - } - return this.replace(new RegExp(str, 'g'), newStr); - }; -} diff --git a/src/app/themes/index.ts b/src/app/themes/index.ts index cff9b725..091a14af 100644 --- a/src/app/themes/index.ts +++ b/src/app/themes/index.ts @@ -1,6 +1,6 @@ -import { Theme } from './theme'; import plantation from './plantation'; import rhino from './rhino'; +import { Theme } from './theme'; const themes = [plantation, rhino]; diff --git a/src/app/themes/plantation.ts b/src/app/themes/plantation.ts index a7091ab7..e1abf176 100644 --- a/src/app/themes/plantation.ts +++ b/src/app/themes/plantation.ts @@ -1,6 +1,7 @@ import { css } from 'styled-components'; -import { ThemeName } from './theme-name'; + import { Theme } from './theme'; +import { ThemeName } from './theme-name'; const palette = { Mustard: '#FFDB57', @@ -18,37 +19,37 @@ const palette = { SeaNymph: '#71A19D', BlueRibbon: '#0038FF', Candlelight: '#ffe05c', - Silver: '#979797' + Silver: '#979797', }; const theme: Theme = { name: ThemeName.plantation, font: { family: "'Roboto', sans-serif", - primaryColor: palette.Zeus + primaryColor: palette.Zeus, }, background: { gradient: css`linear-gradient(30deg, ${palette.Aztec} 0%, ${palette.GableGreen} 50%, ${palette.William} 100%)`, loader: [ [palette.Flamenco, '0%'], - [palette.Mustard, '100%'] - ] + [palette.Mustard, '100%'], + ], }, form: { background: palette.AthensGray, - border: palette.Loblolly + border: palette.Loblolly, }, input: { border: palette.Loblolly, placeholder: palette.RegentGray, error: palette.Cinnabar, - focus: palette.Zeus + focus: palette.Zeus, }, icons: { success: palette.SeaNymph, error: palette.CopperRose, warn: palette.Candlelight, - checkmark: palette.SeaNymph + checkmark: palette.SeaNymph, }, divider: palette.Loblolly, externalLink: palette.BlueRibbon, @@ -56,22 +57,22 @@ const theme: Theme = { border: palette.Loblolly, hover: palette.Zeus, color: palette.Zeus, - error: palette.Cinnabar + error: palette.Cinnabar, }, chevronButton: { color: palette.Zeus, - disabled: palette.Silver + disabled: palette.Silver, }, button: { primaryText: palette.Zeus, outlineText: palette.Zeus, color: palette.Mustard, - hover: palette.LightningYellow + hover: palette.LightningYellow, }, linkButton: { color: palette.Zeus, - hover: palette.Zeus - } + hover: palette.Zeus, + }, }; export default theme; diff --git a/src/app/themes/rhino.ts b/src/app/themes/rhino.ts index 1ebdc4dc..278a379f 100644 --- a/src/app/themes/rhino.ts +++ b/src/app/themes/rhino.ts @@ -1,6 +1,7 @@ import { css } from 'styled-components'; -import { ThemeName } from './theme-name'; + import { Theme } from './theme'; +import { ThemeName } from './theme-name'; const palette = { CodGray: '#110E0B', @@ -18,37 +19,37 @@ const palette = { Gorse: '#fdec4a', Rhino: '#33436B', BlueCharcoal: '#000C1F', - Silver: '#979797' + Silver: '#979797', }; const theme: Theme = { name: ThemeName.rhino, font: { family: "'Roboto', sans-serif", - primaryColor: palette.CodGray + primaryColor: palette.CodGray, }, background: { gradient: css`radial-gradient(75.93% 95.05% at 46.36% 43.35%, ${palette.Rhino} 0%, ${palette.BlueCharcoal} 100%)`, loader: [ [palette.Gorse, '0%'], - [palette.FlushOrange, '100%'] - ] + [palette.FlushOrange, '100%'], + ], }, form: { background: palette.Alabaster, - border: palette.SilverChalice + border: palette.SilverChalice, }, input: { border: palette.SilverChalice, placeholder: palette.RegentGray, error: palette.Cinnabar, - focus: palette.CodGray + focus: palette.CodGray, }, icons: { success: palette.SeaNymph, error: palette.CopperRose, warn: palette.Candlelight, - checkmark: palette.SeaNymph + checkmark: palette.SeaNymph, }, divider: palette.SilverChalice, externalLink: palette.BlueRibbon, @@ -56,22 +57,22 @@ const theme: Theme = { border: palette.SilverChalice, hover: palette.CodGray, color: palette.CodGray, - error: palette.Cinnabar + error: palette.Cinnabar, }, chevronButton: { color: palette.CodGray, - disabled: palette.Silver + disabled: palette.Silver, }, button: { primaryText: palette.White, outlineText: palette.FlushOrange, color: palette.FlushOrange, - hover: palette.Clementine + hover: palette.Clementine, }, linkButton: { color: palette.CodGray, - hover: palette.CodGray - } + hover: palette.CodGray, + }, }; export default theme; diff --git a/src/app/themes/theme-name.ts b/src/app/themes/theme-name.ts index d2040ea2..914e15e1 100644 --- a/src/app/themes/theme-name.ts +++ b/src/app/themes/theme-name.ts @@ -1,4 +1,4 @@ export enum ThemeName { plantation = 'plantation', - rhino = 'rhino' + rhino = 'rhino', } diff --git a/src/app/themes/theme.ts b/src/app/themes/theme.ts index 6efd38aa..5b85b0a4 100644 --- a/src/app/themes/theme.ts +++ b/src/app/themes/theme.ts @@ -1,4 +1,5 @@ import { css } from 'styled-components'; + import { ThemeName } from './theme-name'; export interface Theme { diff --git a/src/app/utils/amount/format-amount.ts b/src/app/utils/amount/format-amount.ts index bf4ec65b..de3ee4c7 100644 --- a/src/app/utils/amount/format-amount.ts +++ b/src/app/utils/amount/format-amount.ts @@ -7,8 +7,9 @@ const getAmountByExponent = ({ minorValue, currencyCode }: AmountInfo): number = export const formatAmount = (amount: AmountInfo): string | null => { return amount && amount.minorValue - ? new Intl.NumberFormat(amount.locale, { style: 'currency', currency: amount.currencyCode }).format( - getAmountByExponent(amount) - ) + ? new Intl.NumberFormat(amount.locale, { + style: 'currency', + currency: amount.currencyCode, + }).format(getAmountByExponent(amount)) : null; }; diff --git a/src/app/utils/country-data/countries.ts b/src/app/utils/country-data/countries.ts index 54c4dafc..17d3aa55 100644 --- a/src/app/utils/country-data/countries.ts +++ b/src/app/utils/country-data/countries.ts @@ -18,151 +18,151 @@ export const countries: Country[] = [ sub: [ { name: 'Andhra Pradesh', - code: 'AP' + code: 'AP', }, { name: 'Arunāchal Pradesh', - code: 'AR' + code: 'AR', }, { name: 'Assam', - code: 'AS' + code: 'AS', }, { name: 'Bihār', - code: 'BR' + code: 'BR', }, { name: 'Chhattīsgarh', - code: 'CT' + code: 'CT', }, { name: 'Goa', - code: 'GA' + code: 'GA', }, { name: 'Gujarāt', - code: 'GJ' + code: 'GJ', }, { name: 'Haryāna', - code: 'HR' + code: 'HR', }, { name: 'Himāchal Pradesh', - code: 'HP' + code: 'HP', }, { name: 'Jhārkhand', - code: 'JH' + code: 'JH', }, { name: 'Karnātaka', - code: 'KA' + code: 'KA', }, { name: 'Kerala', - code: 'KL' + code: 'KL', }, { name: 'Madhya Pradesh', - code: 'MP' + code: 'MP', }, { name: 'Mahārāshtra', - code: 'MH' + code: 'MH', }, { name: 'Manipur', - code: 'MN' + code: 'MN', }, { name: 'Meghālaya', - code: 'ML' + code: 'ML', }, { name: 'Mizoram', - code: 'MZ' + code: 'MZ', }, { name: 'Nāgāland', - code: 'NL' + code: 'NL', }, { name: 'Odisha', - code: 'OR' + code: 'OR', }, { name: 'Punjab', - code: 'PB' + code: 'PB', }, { name: 'Rājasthān', - code: 'RJ' + code: 'RJ', }, { name: 'Sikkim', - code: 'SK' + code: 'SK', }, { name: 'Tamil Nādu', - code: 'TN' + code: 'TN', }, { name: 'Telangāna', - code: 'TG' + code: 'TG', }, { name: 'Tripura', - code: 'TR' + code: 'TR', }, { name: 'Uttarākhand', - code: 'UT' + code: 'UT', }, { name: 'Uttar Pradesh', - code: 'UP' + code: 'UP', }, { name: 'West Bengal', - code: 'WB' + code: 'WB', }, { name: 'Andaman and Nicobar Islands', - code: 'AN' + code: 'AN', }, { name: 'Chandīgarh', - code: 'CH' + code: 'CH', }, { name: 'Dādra and Nagar Haveli and Damān and Diu', - code: 'DH' + code: 'DH', }, { name: 'Delhi', - code: 'DL' + code: 'DL', }, { name: 'Jammu and Kashmīr', - code: 'JK' + code: 'JK', }, { name: 'Ladākh', - code: 'LA' + code: 'LA', }, { name: 'Lakshadweep', - code: 'LD' + code: 'LD', }, { name: 'Puducherry', - code: 'PY' - } - ] - } + code: 'PY', + }, + ], + }, ]; diff --git a/src/app/utils/device.ts b/src/app/utils/device.ts index 84497203..b51a0242 100644 --- a/src/app/utils/device.ts +++ b/src/app/utils/device.ts @@ -1,8 +1,8 @@ const size = { - mobile: 768 + mobile: 768, }; export const device = { desktop: `(min-width: ${size.mobile}px)`, - mobile: `(max-width: ${size.mobile - 1}px)` + mobile: `(max-width: ${size.mobile - 1}px)`, }; diff --git a/src/app/utils/find-previous.ts b/src/app/utils/find-previous.ts index b9610aef..522c8ba0 100644 --- a/src/app/utils/find-previous.ts +++ b/src/app/utils/find-previous.ts @@ -1,4 +1,5 @@ import { FormInfo, ModalForms, ModalName, ModalState } from 'checkout/hooks/modal/types'; + import { findNamed } from './find-named'; export const findInfoWithPrevious = (modals: ModalState[]): FormInfo => { diff --git a/src/app/utils/get-url-params.spec.ts b/src/app/utils/get-url-params.spec.ts index c0821d99..7bf3f93b 100644 --- a/src/app/utils/get-url-params.spec.ts +++ b/src/app/utils/get-url-params.spec.ts @@ -40,7 +40,7 @@ it('Number, string, boolean, null, undefined params', () => { integer: 123, null: null, str: 'hello', - undef: undefined + undef: undefined, }); }); diff --git a/src/app/utils/get-url-params.ts b/src/app/utils/get-url-params.ts index aba2e7e3..82296494 100644 --- a/src/app/utils/get-url-params.ts +++ b/src/app/utils/get-url-params.ts @@ -52,7 +52,7 @@ export const getUrlParams = (url: string): URLParams => Object.entries(getEncodedUrlParams(url)).reduce( (acc, [name, value]) => ({ ...acc, - [decodeURIComponentWithLogError(name)]: parseValue(decodeURIComponentWithLogError(value)) + [decodeURIComponentWithLogError(name)]: parseValue(decodeURIComponentWithLogError(value)), }), - {} + {}, ); diff --git a/src/app/utils/group-by.ts b/src/app/utils/group-by.ts index 37e18c2a..0bb4837d 100644 --- a/src/app/utils/group-by.ts +++ b/src/app/utils/group-by.ts @@ -8,7 +8,7 @@ function baseAssignValue(object, key, value) { configurable: true, enumerable: true, value: value, - writable: true + writable: true, }); } else { object[key] = value; diff --git a/src/app/utils/interaction-form/prepare-form.ts b/src/app/utils/interaction-form/prepare-form.ts index f1dc47bf..9d72ad4f 100644 --- a/src/app/utils/interaction-form/prepare-form.ts +++ b/src/app/utils/interaction-form/prepare-form.ts @@ -1,6 +1,7 @@ import { BrowserPostRequest, BrowserRequest, RequestType } from 'checkout/backend'; -import { toPostFormInputs } from './to-post-form-inputs'; + import { toGetFormInputs } from './to-get-form-inputs'; +import { toPostFormInputs } from './to-post-form-inputs'; const toInputs = (origin: string, request: BrowserRequest): HTMLInputElement[] => { switch (request.requestType) { @@ -23,7 +24,7 @@ const toMethod = (request: BrowserRequest): 'POST' | 'GET' => { export const prepareForm = ( origin: string, request: BrowserRequest, - target: '_self' | '_blank' = '_self' + target: '_self' | '_blank' = '_self', ): HTMLFormElement => { const form = document.createElement('form'); form.action = request.uriTemplate; diff --git a/src/app/utils/interaction-form/to-get-form-inputs.ts b/src/app/utils/interaction-form/to-get-form-inputs.ts index a28ae563..888f3230 100644 --- a/src/app/utils/interaction-form/to-get-form-inputs.ts +++ b/src/app/utils/interaction-form/to-get-form-inputs.ts @@ -1,5 +1,6 @@ import { BrowserGetRequest } from 'checkout/backend'; import { getEncodedUrlParams } from 'checkout/utils'; + import { expandWithRedirect, hasTerminationUriTemplate } from './uri-template'; const createInput = (name: string, value: any): HTMLInputElement => { diff --git a/src/app/utils/interaction-form/to-post-form-inputs.ts b/src/app/utils/interaction-form/to-post-form-inputs.ts index ecc85be4..802e148b 100644 --- a/src/app/utils/interaction-form/to-post-form-inputs.ts +++ b/src/app/utils/interaction-form/to-post-form-inputs.ts @@ -1,4 +1,5 @@ import { FormField } from 'checkout/backend'; + import { expandWithRedirect } from './uri-template'; const createInput = (origin: string, formField: FormField): HTMLInputElement => { diff --git a/src/app/utils/interaction-form/uri-template.ts b/src/app/utils/interaction-form/uri-template.ts index cbfe1677..2da20369 100644 --- a/src/app/utils/interaction-form/uri-template.ts +++ b/src/app/utils/interaction-form/uri-template.ts @@ -1,6 +1,7 @@ -import isString from 'checkout/utils/is-string'; import { TemplateExpression, parse } from 'uri-template'; +import isString from 'checkout/utils/is-string'; + const hasTerminationUriParam = (expression: TemplateExpression): boolean => !!expression.params.find((param) => param.name === 'termination_uri'); diff --git a/src/app/utils/is-payment-result-success.ts b/src/app/utils/is-payment-result-success.ts index 58b61c61..c6fa7774 100644 --- a/src/app/utils/is-payment-result-success.ts +++ b/src/app/utils/is-payment-result-success.ts @@ -1,12 +1,12 @@ -import last from 'checkout/utils/last'; import { InvoiceEvent, InvoiceChangeType, InvoiceStatusChanged, PaymentStatusChanged, PaymentStatuses, - InvoiceStatuses + InvoiceStatuses, } from 'checkout/backend'; +import last from 'checkout/utils/last'; const fromPaymentStatusChanged = (change: PaymentStatusChanged): boolean => { switch (change.status) { diff --git a/src/app/utils/partial-right.ts b/src/app/utils/partial-right.ts index 4bd07835..43dccbe8 100644 --- a/src/app/utils/partial-right.ts +++ b/src/app/utils/partial-right.ts @@ -1,3 +1,6 @@ -const partialRight = (func, ...cachedArgs) => (...args) => func(...args, ...cachedArgs); +const partialRight = + (func, ...cachedArgs) => + (...args) => + func(...args, ...cachedArgs); export default partialRight; diff --git a/src/app/utils/phone/format-phone-number.ts b/src/app/utils/phone/format-phone-number.ts index 97f0145c..ae66f4f4 100644 --- a/src/app/utils/phone/format-phone-number.ts +++ b/src/app/utils/phone/format-phone-number.ts @@ -1,5 +1,5 @@ -import { FormEvent } from 'react'; import { AsYouType } from 'libphonenumber-js/min'; +import { FormEvent } from 'react'; export const formatOnInput = (value: string): string => { if (value === '') { diff --git a/src/app/utils/phone/get-phone-country-code.ts b/src/app/utils/phone/get-phone-country-code.ts index 76cdccad..7f010cf9 100644 --- a/src/app/utils/phone/get-phone-country-code.ts +++ b/src/app/utils/phone/get-phone-country-code.ts @@ -1,7 +1,9 @@ import { AsYouType, getCountryCallingCode, CountryCode } from 'libphonenumber-js/min'; export function getPhoneCountryCode(value: string): string { - const formatter = new AsYouType('RU') as AsYouType & { country: CountryCode }; + const formatter = new AsYouType('RU') as AsYouType & { + country: CountryCode; + }; formatter.input(value); return getCountryCallingCode(formatter.country).toString(); } diff --git a/src/appConfig.json b/src/appConfig.json index ea8b98c2..b6aab93c 100644 --- a/src/appConfig.json +++ b/src/appConfig.json @@ -1,23 +1,8 @@ { - "capiEndpoint": "", - "wrapperEndpoint": "", - "applePayMerchantID": "", - "samsungPayMerchantName": "", - "samsungPayServiceID": "", "brandless": false, "fixedTheme": "", - "brandName": "Vality", - "yandexPay": { - "merchantName": "Vality", - "merchantID": "00000000-0000-0000-0000-000000000000", - "gatewayMerchantID": "vality" - }, - "googlePay": { - "merchantName": "Vality", - "merchantID": "12345678901234567890", - "gateway": "vality", - "gatewayMerchantID": "vality", - "merchantOrigin": "vality.dev/checkout" - }, - "sentryDsn": "/projects//keys/>" + "capiEndpoint": "", + "wrapperEndpoint": "", + "urlShortenerEndpoint": "", + "sentryDsn": "" } diff --git a/src/communicator/communicator-events.ts b/src/communicator/communicator-events.ts index 0d74cba4..11b750fe 100644 --- a/src/communicator/communicator-events.ts +++ b/src/communicator/communicator-events.ts @@ -3,5 +3,5 @@ export const communicatorInstanceName = 'checkout-initializer'; export enum CommunicatorEvents { init = 'checkout-init', finished = 'checkout-finished', - close = 'checkout-close' + close = 'checkout-close', } diff --git a/src/communicator/constants.ts b/src/communicator/constants.ts index aba5ba93..0e0cef82 100644 --- a/src/communicator/constants.ts +++ b/src/communicator/constants.ts @@ -1,4 +1,4 @@ export enum Constants { initializerHandName = 'communicator-initializer-hand', - listenerHandName = 'communicator-listener-hand' + listenerHandName = 'communicator-listener-hand', } diff --git a/src/communicator/initialize.ts b/src/communicator/initialize.ts index 9b29769b..38f79d35 100644 --- a/src/communicator/initialize.ts +++ b/src/communicator/initialize.ts @@ -1,13 +1,13 @@ +import { Constants } from './constants'; +import { log } from './log'; import { RealTransport } from './real-transport'; import { Transport } from './transport'; -import { log } from './log'; -import { Constants } from './constants'; export const initialize = ( target: Window, origin: string, transportName: string, - isLog: boolean = false + isLog: boolean = false, ): Promise => { let interval: number; return new Promise((resolve, reject) => { diff --git a/src/communicator/listen.ts b/src/communicator/listen.ts index d75b8e23..c7c672d8 100644 --- a/src/communicator/listen.ts +++ b/src/communicator/listen.ts @@ -1,7 +1,7 @@ +import { Constants } from './constants'; +import { log } from './log'; import { RealTransport } from './real-transport'; import { Transport } from './transport'; -import { log } from './log'; -import { Constants } from './constants'; const timeout = (ms: number): Promise => new Promise((_resolve, reject) => { diff --git a/src/communicator/real-transport.ts b/src/communicator/real-transport.ts index e9699e14..594fbcb7 100644 --- a/src/communicator/real-transport.ts +++ b/src/communicator/real-transport.ts @@ -4,7 +4,7 @@ const parse = (data: any): any => { let parsed; try { parsed = JSON.parse(data); - } catch (e) {} // tslint:disable-line:no-empty + } catch (e) {} // eslint-disable-line no-empty return parsed; }; @@ -24,7 +24,7 @@ export class RealTransport implements Transport { constructor( private readonly target: Window, private readonly origin: string, - private readonly transportName = 'default-communicator-transport' + private readonly transportName = 'default-communicator-transport', ) { this.transportListener = transportListener.bind(this, this.transportName, this.events); window.addEventListener('message', this.transportListener, false); @@ -34,7 +34,7 @@ export class RealTransport implements Transport { const serialized = JSON.stringify({ data, name: eventName, - transport: this.transportName + transport: this.transportName, }); this.target.postMessage(serialized, this.origin); } diff --git a/src/environment.ts b/src/environment.ts index c3e3311c..d94cb09b 100644 --- a/src/environment.ts +++ b/src/environment.ts @@ -8,4 +8,4 @@ export interface Configurator { configure: (userConfig: any) => Initializer; } -export const environment = (window as any) as Environment; +export const environment = window as any as Environment; diff --git a/src/get-origin.ts b/src/get-origin.ts index 8ac1fadc..35958846 100644 --- a/src/get-origin.ts +++ b/src/get-origin.ts @@ -1,5 +1,5 @@ export const ieCurrentScriptStub = { - src: `${document.location.origin}/checkout.js` + src: `${document.location.origin}/checkout.js`, }; const getCurrentScript = (): HTMLScriptElement => (document.currentScript || ieCurrentScriptStub) as HTMLScriptElement; diff --git a/src/initializer/dom-ready.ts b/src/initializer/dom-ready.ts index f195848e..3211ce8e 100644 --- a/src/initializer/dom-ready.ts +++ b/src/initializer/dom-ready.ts @@ -34,8 +34,7 @@ export const domReady = (): Promise => { let top: any = false; try { top = window.frameElement === null && document.documentElement; - /* tslint:disable: no-empty */ - } catch (e) {} + } catch (e) {} // eslint-disable-line no-empty if (top && top.doScroll) { (function scrollCheck() { if (ready) { diff --git a/src/initializer/html-integration.ts b/src/initializer/html-integration.ts index 313d1fbc..a32a3262 100644 --- a/src/initializer/html-integration.ts +++ b/src/initializer/html-integration.ts @@ -4,9 +4,9 @@ const mapKeys = (obj, mapper) => Object.entries(obj).reduce( (acc, [key, value]) => ({ ...acc, - [mapper(value, key)]: value + [mapper(value, key)]: value, }), - {} + {}, ); const getOuterForm = (element: HTMLScriptElement) => { @@ -21,7 +21,7 @@ const prepareUserConfig = (element: HTMLScriptElement): object => ({ if (outerForm) { outerForm.submit(); } - } + }, }); export class HtmlIntegration { diff --git a/src/initializer/iframe-container.ts b/src/initializer/iframe-container.ts index 34d3a6a3..a7ba26b0 100644 --- a/src/initializer/iframe-container.ts +++ b/src/initializer/iframe-container.ts @@ -18,11 +18,11 @@ const styles = { top: '0', width: '100%', height: '100%', - zIndex: 2147483647 + zIndex: 2147483647, }; const setStyles = (element, styles) => { - for (let property in styles) { + for (const property in styles) { element.style[property] = styles[property]; } }; @@ -37,7 +37,7 @@ const create = (origin: string): HTMLIFrameElement => { iframe.setAttribute('allowpaymentrequest', ''); setStyles(iframe, { ...iframe.style, - ...styles + ...styles, }); return iframe; }; diff --git a/src/initializer/iframe-initializer.ts b/src/initializer/iframe-initializer.ts index 03436ba5..4d7d4323 100644 --- a/src/initializer/iframe-initializer.ts +++ b/src/initializer/iframe-initializer.ts @@ -1,7 +1,8 @@ -import { initialize, CommunicatorEvents, communicatorInstanceName } from '../communicator'; +import { InitConfig } from 'checkout/config'; + import { IframeContainer } from './iframe-container'; import { Initializer } from './initializer'; -import { InitConfig } from 'checkout/config'; +import { initialize, CommunicatorEvents, communicatorInstanceName } from '../communicator'; export class IframeInitializer extends Initializer { private container: IframeContainer; @@ -16,7 +17,10 @@ export class IframeInitializer extends Initializer { this.container.show(); initialize(target, this.origin, communicatorInstanceName).then((transport) => { this.opened(); - transport.emit(CommunicatorEvents.init, { ...this.config, ...openConfig }); + transport.emit(CommunicatorEvents.init, { + ...this.config, + ...openConfig, + }); transport.on(CommunicatorEvents.finished, () => { transport.destroy(); this.container.reinitialize(); diff --git a/src/initializer/index.ts b/src/initializer/index.ts index 31dec238..f9a9fd71 100644 --- a/src/initializer/index.ts +++ b/src/initializer/index.ts @@ -3,7 +3,7 @@ import { PopupInitializer } from './popup-initializer'; import { environment, Configurator } from '../environment'; const init = (origin: string): Configurator => ({ - configure: (userConfig: any) => new PopupInitializer(origin, userConfig) + configure: (userConfig: any) => new PopupInitializer(origin, userConfig), }); domReady().then((origin) => { diff --git a/src/initializer/init-button/init-button.css b/src/initializer/init-button/init-button.css index 11157f26..def5056f 100644 --- a/src/initializer/init-button/init-button.css +++ b/src/initializer/init-button/init-button.css @@ -5,7 +5,11 @@ visibility: visible; padding: 8px 12px; outline: 0; - font: bold 14px/14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + font: + bold 14px/14px 'Helvetica Neue', + Helvetica, + Arial, + sans-serif; text-decoration: none; color: #fff; border: 1px solid #2384c1; diff --git a/src/initializer/initializer.ts b/src/initializer/initializer.ts index 575906e4..9ae4bbb8 100644 --- a/src/initializer/initializer.ts +++ b/src/initializer/initializer.ts @@ -27,7 +27,7 @@ const getLocale = (userConfig: any) => userConfig.locale || 'auto'; const prepareConfig = (userConfig: any): any => ({ ...mapBoolean(userConfig), - locale: getLocale(userConfig) + locale: getLocale(userConfig), }); const dummyFn: ActionCallback = () => undefined; diff --git a/src/initializer/popup-initializer.ts b/src/initializer/popup-initializer.ts index d7c94a5f..2dae1a03 100644 --- a/src/initializer/popup-initializer.ts +++ b/src/initializer/popup-initializer.ts @@ -1,11 +1,14 @@ -import { initialize, CommunicatorEvents, communicatorInstanceName } from '../communicator'; import { Initializer } from './initializer'; import { InitConfig } from '../app/config'; +import { initialize, CommunicatorEvents, communicatorInstanceName } from '../communicator'; import { serializeUrlParams } from '../serialize-url-params'; export class PopupInitializer extends Initializer { open(openConfig: InitConfig = {}) { - const url = `${this.origin}/v1/checkout.html?${serializeUrlParams({ ...this.config, ...openConfig })}`; + const url = `${this.origin}/v1/checkout.html?${serializeUrlParams({ + ...this.config, + ...openConfig, + })}`; const target = window.open(url, '_blank'); initialize(target, this.origin, communicatorInstanceName).then((transport) => { this.opened(); diff --git a/src/serialize-url-params.ts b/src/serialize-url-params.ts index 44b05865..4abc714a 100644 --- a/src/serialize-url-params.ts +++ b/src/serialize-url-params.ts @@ -1,7 +1,7 @@ export const serializeUrlParams = (params: { [name: string]: any }): string => { const urlParams: string[] = []; for (const prop in params) { - if (params.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(params, prop)) { let value = params[prop]; if (typeof value === 'function' || value === undefined || value === null) { continue; diff --git a/tsconfig.json b/tsconfig.json index 3fc69089..39bf651c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,25 @@ { "compilerOptions": { - "outDir": "./dist/", - "sourceMap": true, - "moduleResolution": "Node", - "module": "ES2015", - "target": "ES5", - "jsx": "react", - "lib": ["ESNext", "DOM"], + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "strict": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, "baseUrl": ".", "paths": { "checkout/*": ["./src/app/*", "./src/locale/*"] - }, - "pretty": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "skipLibCheck": true, - "esModuleInterop": true + } }, "include": ["./src/**/*", "./types/**/*"] } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 484dc235..00000000 --- a/tslint.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": ["tslint:recommended", "tslint-react", "tslint-immutable", "tslint-config-prettier"], - "rules": { - "member-access": [true, "no-public"], - "trailing-comma": false, - "ordered-imports": false, - "no-console": [true, "log"], - "max-line-length": false, - "object-literal-sort-keys": false, - "interface-name": false, - "no-namespace": false, - "jsx-alignment": false, - "jsx-no-multiline-js": false, - "jsx-no-lambda": false, - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case", - "require-const-for-all-caps" - ] - } - } -} diff --git a/types/kjua.d.ts b/types/kjua.d.ts index 60d465cf..533cfa1a 100644 --- a/types/kjua.d.ts +++ b/types/kjua.d.ts @@ -51,7 +51,7 @@ declare module 'kjua' { } function kjua( - options: KjuaOptions & { render?: T } + options: KjuaOptions & { render?: T }, ): T extends 'canvas' ? HTMLCanvasElement : HTMLImageElement; namespace kjua { export { KjuaOptions as Options }; diff --git a/vite.config.app.ts b/vite.config.app.ts index 9c7a2f7e..3685d6ab 100644 --- a/vite.config.app.ts +++ b/vite.config.app.ts @@ -1,8 +1,8 @@ -import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; -import tsconfigPaths from 'vite-tsconfig-paths'; +import { defineConfig } from 'vite'; import { viteStaticCopy } from 'vite-plugin-static-copy'; import svgr from 'vite-plugin-svgr'; +import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ base: './', @@ -10,9 +10,9 @@ export default defineConfig({ outDir: 'dist/v1', rollupOptions: { input: { - app: './checkout.html' - } - } + app: './checkout.html', + }, + }, }, plugins: [ react(), @@ -22,30 +22,30 @@ export default defineConfig({ targets: [ { src: 'src/appConfig.json', - dest: './' + dest: './', }, { src: 'src/env.json', - dest: './' + dest: './', }, { src: 'src/assets/*', - dest: './assets' + dest: './assets', }, { src: 'src/locale/*.json', - dest: './locale' - } - ] - }) + dest: './locale', + }, + ], + }), ], server: { port: 7050, proxy: { '^/v1': { target: 'http://localhost:7050', - rewrite: (path) => path.replace(/^\/v1/, '') - } - } - } + rewrite: (path) => path.replace(/^\/v1/, ''), + }, + }, + }, }); diff --git a/vite.config.checkout.ts b/vite.config.checkout.ts index 478d5839..412112a2 100644 --- a/vite.config.checkout.ts +++ b/vite.config.checkout.ts @@ -5,12 +5,12 @@ export default defineConfig({ outDir: 'dist', lib: { entry: './src/initializer/index.ts', - name: 'checkout' + name: 'checkout', }, rollupOptions: { output: { - entryFileNames: 'checkout.js' - } - } - } + entryFileNames: 'checkout.js', + }, + }, + }, }); diff --git a/vite.config.preview.ts b/vite.config.preview.ts index 6508118b..e9096b56 100644 --- a/vite.config.preview.ts +++ b/vite.config.preview.ts @@ -1,3 +1,3 @@ export default { - root: './dist' + root: './dist', };