diff --git a/.eslintignore b/.eslintignore index 0fc6ca764..9c9180279 100755 --- a/.eslintignore +++ b/.eslintignore @@ -2,7 +2,6 @@ **/lib/* packages/api-client/src/types/GraphQL.ts packages/api-client/server -packages/composables packages/api-client/lib packages/theme/static/sw.js .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js index 68f3ff241..d66493026 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,7 +14,6 @@ module.exports = { project: [ resolve(__dirname, './tsconfig.json'), resolve(__dirname, './packages/api-client/tsconfig.eslint.json'), - resolve(__dirname, './packages/composables/tsconfig.eslint.json'), resolve(__dirname, './packages/theme/tsconfig.json'), resolve(__dirname, './packages/theme/tests/e2e/tsconfig.json'), resolve(__dirname, './packages/load-tests/tsconfig.json'), diff --git a/.github/workflows/deploy-vue-storefront-cloud.yml b/.github/workflows/deploy-vue-storefront-cloud.yml index fc6d58420..2b37681c3 100644 --- a/.github/workflows/deploy-vue-storefront-cloud.yml +++ b/.github/workflows/deploy-vue-storefront-cloud.yml @@ -10,6 +10,10 @@ on: jobs: create-deployment: runs-on: ubuntu-latest + + permissions: + deployments: write + outputs: environment-name: ${{ steps.determine-environment.outputs.name }} environment-code: ${{ steps.determine-environment.outputs.code }} @@ -48,6 +52,7 @@ jobs: echo ::set-output name=name::${{ env.ENVNAME }} echo ::set-output name=code::${{ env.ENVCODE }} echo ::set-output name=middleware-url::${{ env.MIDDLEWARE_URL }} + echo ::set-output name=ssr-middleware-url::${{ env.SSR_MIDDLEWARE_URL }} - name: Create GitHub deployment id: deployment @@ -88,6 +93,7 @@ jobs: VSF_STORE_URL: '' VSF_MIDDLEWARE_URL: ${{ needs.create-deployment.outputs.environment-middleware-url }} + VSF_SSR_MIDDLEWARE_URL: ${{ needs.create-deployment.outputs.environment-ssr-middleware-url }} VSF_MAGENTO_BASE_URL: https://magento2-instance.vuestorefront.io/ VSF_MAGENTO_GRAPHQL_URL: https://magento2-instance.vuestorefront.io/graphql @@ -99,7 +105,7 @@ jobs: VSF_IMAGE_PROVIDER_BASE_URL: https://res-4.cloudinary.com/dnozky7on/image/upload/ VSF_IMAGE_PROVIDER_DOMAIN: https://res-4.cloudinary.com - VSF_REDIS_ENABLED: true + VSF_REDIS_ENABLED: false VSF_REDIS_HOST: redis # VSF cloud specific VSF_REDIS_PORT: 6379 VSF_REDIS_KEY_PREFIX: ${{ github.sha }} @@ -113,6 +119,8 @@ jobs: VSF_RECAPTCHA_SITE_KEY: 6Ldce0EeAAAAAAGGtGWG-e-SygXiFub6PXHT5fKd VSF_RECAPTCHA_SECRET_KEY: ${{ secrets.RECAPTCHA_SECRET_KEY }} + VSF_COOKIE_SECURE: true + VSF_SENTRY_DSN: ${{ secrets.SENTRY_DSN }} LAST_COMMIT: ${{ github.sha }} @@ -129,6 +137,10 @@ jobs: finalize-deployment: runs-on: ubuntu-latest + + permissions: + deployments: write + needs: [create-deployment, build, deploy] if: always() steps: diff --git a/.github/workflows/public_env_info/canary b/.github/workflows/public_env_info/canary index fddb3b3d7..9d0df301a 100644 --- a/.github/workflows/public_env_info/canary +++ b/.github/workflows/public_env_info/canary @@ -1,5 +1,6 @@ ENVNAME=canary ENVCODE=demo-magento2-canary -BASE_URL=https://demo-magento2-canary.europe-west1.gcp.storefrontcloud.io -MIDDLEWARE_URL=https://demo-magento2-canary.europe-west1.gcp.storefrontcloud.io/api +BASE_URL=https://magento2stage.vuestorefront.io +MIDDLEWARE_URL=https://magento2stage.vuestorefront.io/api +SSR_MIDDLEWARE_URL=http://localhost:3000/api MAGENTO_GRAPHQL_URL=https://magento2-instance.vuestorefront.io:8443/graphql diff --git a/.github/workflows/public_env_info/dev b/.github/workflows/public_env_info/dev index e3aec0cb5..6bcbb7083 100644 --- a/.github/workflows/public_env_info/dev +++ b/.github/workflows/public_env_info/dev @@ -2,4 +2,5 @@ ENVNAME=dev ENVCODE=demo-magento2-dev BASE_URL=https://demo-magento2-dev.europe-west1.gcp.storefrontcloud.io MIDDLEWARE_URL=https://demo-magento2-dev.europe-west1.gcp.storefrontcloud.io/api +SSR_MIDDLEWARE_URL=http://localhost:3000/api MAGENTO_GRAPHQL_URL=https://magento2-instance.vuestorefront.io:8443/graphql diff --git a/.github/workflows/public_env_info/enterprise b/.github/workflows/public_env_info/enterprise index 4d7efada1..d78b068e8 100644 --- a/.github/workflows/public_env_info/enterprise +++ b/.github/workflows/public_env_info/enterprise @@ -2,4 +2,5 @@ ENVNAME=enterprise ENVCODE=demo-magento2-enterprise BASE_URL=https://demo-magento2-enterprise.europe-west1.gcp.storefrontcloud.io MIDDLEWARE_URL=https://demo-magento2-enterprise.europe-west1.gcp.storefrontcloud.io/api +SSR_MIDDLEWARE_URL=http://localhost:3000/api MAGENTO_GRAPHQL_URL=https://magento2-instance.vuestorefront.io:8443/graphql diff --git a/.github/workflows/public_env_info/production b/.github/workflows/public_env_info/production index d9696b5f6..6f214e8b6 100644 --- a/.github/workflows/public_env_info/production +++ b/.github/workflows/public_env_info/production @@ -2,4 +2,5 @@ ENVNAME=production ENVCODE=demo-magento2 BASE_URL=https://demo-magento2.europe-west1.gcp.vuestorefront.cloud MIDDLEWARE_URL=https://demo-magento2.europe-west1.gcp.vuestorefront.cloud/api +SSR_MIDDLEWARE_URL=http://localhost:3000/api MAGENTO_GRAPHQL_URL=https://magento2-instance.vuestorefront.io:8443/graphql diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 02f658c81..f61e1eb6f 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -30,6 +30,3 @@ jobs: - run: yarn build:api-client && yarn publish:api-client "${{ github.event.inputs.npmTag }}" "$NODE_AUTH_TOKEN" env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - run: yarn build:composables && yarn publish:composables "${{ github.event.inputs.npmTag }}" "$NODE_AUTH_TOKEN" - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.vuestorefrontcloud/docker/.dockerignore b/.vuestorefrontcloud/docker/.dockerignore new file mode 100644 index 000000000..73aac34dc --- /dev/null +++ b/.vuestorefrontcloud/docker/.dockerignore @@ -0,0 +1,2 @@ +**/node_modules +internals diff --git a/.vuestorefrontcloud/docker/Dockerfile b/.vuestorefrontcloud/docker/Dockerfile index c38d0c5d7..097974dad 100644 --- a/.vuestorefrontcloud/docker/Dockerfile +++ b/.vuestorefrontcloud/docker/Dockerfile @@ -66,10 +66,9 @@ ENV VSF_RECAPTCHA_SITE_KEY=${VSF_RECAPTCHA_SITE_KEY} ENV VSF_RECAPTCHA_SECRET_KEY=${VSF_RECAPTCHA_SECRET_KEY} ENV VSF_MIDDLEWARE_URL=${VSF_MIDDLEWARE_URL} -RUN npm config set @vsf-enterprise:registry=https://registrynpm.storefrontcloud.io - -RUN npm install -g npm-cli-login \ - && npm-cli-login +RUN npm config set @vsf-enterprise:registry=https://registrynpm.storefrontcloud.io \ + && npm install -g npm-cli-login \ + && npm-cli-login WORKDIR /var/www @@ -77,11 +76,8 @@ COPY . . RUN mv /var/www/packages/theme/nuxt.config.js /var/www/packages/theme/base.nuxt.config.js && cp .vuestorefrontcloud/docker/nuxt.config.additional.js /var/www/packages/theme/nuxt.config.js -RUN yarn install - -RUN npx yarn@1.19.0 workspace @vue-storefront/magento-theme add @sentry/tracing @nuxtjs/sentry +RUN yarn install && yarn build && yarn cache clean --all -RUN yarn build && yarn cache clean --all COPY .vuestorefrontcloud/docker/vue-storefront.sh /usr/local/bin/ RUN chmod a+x /usr/local/bin/vue-storefront.sh diff --git a/.vuestorefrontcloud/docker/nuxt.config.additional.js b/.vuestorefrontcloud/docker/nuxt.config.additional.js index 6fe2b8d3f..2a9bff20d 100755 --- a/.vuestorefrontcloud/docker/nuxt.config.additional.js +++ b/.vuestorefrontcloud/docker/nuxt.config.additional.js @@ -7,7 +7,6 @@ export default () => { ...baseDefaults, modules: [ ...baseDefaults.modules, - '@nuxtjs/sentry', ], sentry: { dsn: process.env.VSF_SENTRY_DSN, diff --git a/docs/installation-setup/configure-integration.md b/docs/installation-setup/configure-integration.md index f2e4e077b..0d8662461 100644 --- a/docs/installation-setup/configure-integration.md +++ b/docs/installation-setup/configure-integration.md @@ -24,6 +24,72 @@ After installation, the first step is configuring the integration using the envi 3. Update values in the `.env` file. +4. Explanation of env variables + + #### Nuxt application configuration options + ``` + VSF_NUXT_APP_ENV=development # application mode [production|development] + VSF_NUXT_APP_PORT=3000 # nuxt server port property + VSF_NUXT_APP_HOST=0.0.0.0 # nuxt server host property + ``` + + #### Storefront and middleware endpoints configuration + ``` + VSF_STORE_URL=https://localhost:3000 # external base url + VSF_MIDDLEWARE_URL=https://localhost:3000/api/ # external middleware base url + VSF_SSR_MIDDLEWARE_URL=http://localhost:3000/api/ # internal middleware base url + ``` + **NOTE**: *For many infrastructures `middleware_url` and `ssr_middleware_url` will be the same, but sometimes they might be different. For example, when it comes to deployment using a rolling-update strategy on the Kubernetes cluster, the Kubernetes is probing SSR if it's already up. SSR is trying to call middleware using an external URL (market...storefrontcloud.io) rather than localhost:3000/API, while the middleware isn't available publicly yet, because the SSR didn't respond with 200 in the first place.* + + #### Magento 2 endpoints configuration and others + ``` + VSF_MAGENTO_BASE_URL={YOUR_SITE_FRONT_URL} + VSF_MAGENTO_GRAPHQL_URL=https://{YOUR_SITE_FRONT_URL}/graphql + + VSF_MAGENTO_EXTERNAL_CHECKOUT_ENABLED=false + VSF_MAGENTO_EXTERNAL_CHECKOUT_URL=https://{YOUR_SITE_FRONT_URL} + VSF_MAGENTO_EXTERNAL_CHECKOUT_SYNC_PATH=/vue/cart/sync + ``` + + #### Image provider configuration + ``` + VSF_IMAGE_PROVIDER=cloudinary + VSF_IMAGE_PROVIDER_BASE_URL=https://res-4.cloudinary.com/{YOUR_ID}/image/upload/ + VSF_IMAGE_PROVIDER_DOMAIN=https://res-4.cloudinary.com + ``` + + #### Redis cache configuration + ``` + VSF_REDIS_ENABLED=false + VSF_REDIS_HOST=127.0.0.1 + VSF_REDIS_PORT=6379 + VSF_REDIS_KEY_PREFIX= + VSF_REDIS_CACHE_INVALIDATE_URL=/cache-invalidate + ``` + #### ReCaptcha configuration + ``` + VSF_RECAPTCHA_ENABLED=false + VSF_RECAPTCHA_SITE_KEY= + VSF_RECAPTCHA_SECRET_KEY= + VSF_RECAPTCHA_HIDE_BADGE= + VSF_RECAPTCHA_SIZE=invisible + VSF_RECAPTCHA_MIN_SCORE=0.5 + VSF_RECAPTCHA_VERSION=3 + ``` + + #### Cookies configuration + ``` + VSF_COOKIE_HTTP_ONLY= + VSF_COOKIE_SECURE= + VSF_COOKIE_SAME_SITE= + VSF_COOKIE_PATH= + ``` + + #### Other + ``` + NODE_TLS_REJECT_UNAUTHORIZED=0 # toggle TLS verification (eg. for a local development) +``` + ### 2. Setup store configuration The `plugins/storeConfigPlugin.ts` plugin loads store configuration data from Magento and saves it into the Pinia store under the `$state.storeConfig` property. By default, the amount of data loaded from Magento is minimal to avoid over-fetching, but as your application grows, you might need to pull more data. @@ -74,7 +140,7 @@ When working with translation in your application, you need to: ### 4. Configure default cookies settings -Vue Storefront app uses different cookies but all share the same default config. To adjust the configuration you have to modify `middleware.config.js`. +Vue Storefront app uses different cookies but all share the same default config. To adjust the configuration you have to add `env` variable, which is the recommended way, or modify `middleware.config.js`. Once done, rebuild your application. ```js @@ -85,8 +151,8 @@ module.exports = { /*...*/ // Here you can override default cookies options cookiesDefaultOpts: { - httpOnly: false, - secure: true, // Make sure that you have ssl configured, otherwise disable this flag + httpOnly: VSF_COOKIE_HTTP_ONLY || false, + secure: VSF_COOKIE_SECURE || true, // Make sure that you have ssl configured, otherwise disable this flag }, /*...*/ }, @@ -100,13 +166,28 @@ module.exports = { ### Install `mkcert` Please, follow the steps in the [official instruction](https://github.com/FiloSottile/mkcert). Different OS might require different steps to accomplish the task. -### Generate certificate for a local development +#### Update nuxt.config.js +In the `nuxt.config.js` add the certificate configuration + +``` +baseConfig.server = { + ...baseConfig.server, + https: { + key: fs.readFileSync(path.resolve(__dirname, 'localhost-key.pem')), + cert: fs.readFileSync(path.resolve(__dirname, 'localhost.pem')), + }, +}; +``` + + +#### Generate certificate for a local development If you set up your project from CLI run the command in the APP root directory. If you are a contributor and have cloned Vue Storefront repository, run the command in `packages/theme`. ``` mkcert localhost ``` + ### Start project ```bash yarn dev diff --git a/docs/migration-guides/1.1.0/1.1.0-bic.md b/docs/migration-guides/1.1.0/1.1.0-bic.md new file mode 100644 index 000000000..5a817413b --- /dev/null +++ b/docs/migration-guides/1.1.0/1.1.0-bic.md @@ -0,0 +1,26 @@ +# 1.1.0 Backward incompatible changes reference + +In this document, you can see crucial breaking changes in the `1.1.0` compared to `1.0.2` release. To see all changes, please take a look at [the release pull request.](https://github.com/vuestorefront/magento2/pull/1355) + +## feat!: implement Magento URL rewrites + +[https://github.com/vuestorefront/magento2/pull/1321/files](https://github.com/vuestorefront/magento2/pull/1321) + +| File | What was changed | +|--------------------------------------------------------------------------------------------| --- | +| **[!]** packages/theme/middleware/url-resolver.ts | A new, rewrite-aware URL resolver is added. | +| **[!]** packages/theme/modules/catalog/index.ts | Routes configuration is removed. | +| **[!]** packages/theme/stores/page.ts | Add Pinia PageStore to store route data state for pages. | +| packages/api-client/src/api/route/route.ts | The query data structure is modified: relative_url and redirect_code are removed. | +| packages/theme/composables/useUiHelpers/index.ts | The category prefix is removed from the category URL string. | +| packages/theme/modules/catalog/category/helpers/useTraverseCategory.ts | The category prefix is removed from the category URL string. | +| packages/theme/modules/catalog/product/composables/useProduct/useProduct.ts | Add getProductPath method. Get a product path from url_rewrites or url_key. | +| packages/theme/helpers/cart/addToCart.ts | GroupedProduct’s add-to-cart URL resolution is simplified and replaced with the getProductPath. | +| packages/theme/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts | Product link URL resolution is simplified and replaced with the getProductPath. | +| packages/theme/modules/customer/pages/MyAccount/MyWishlist.vue | Product link URL resolution is simplified and replaced with the getProductPath. | +| packages/theme/modules/catalog/product/components/ProductsCarousel.vue | Product link URL resolution is simplified and replaced with the getProductPath. | +| packages/theme/modules/GraphQL/types.ts | Add missing optional fields on the RoutableInterface | + +***Notes:*** If you are using in your project old, prefixed URL or URL resolvers, replace them with the usage of the new **useProduct::getProductPath** + +***Notes:*** The old routing system is replaced with a Magento route **type** resolver. Previously, VSF was able to route to a CMS, Category, or Product page based on the URL prefix. Currently, the renderer type is resolved based on the GraphQL **route** query and the route **type** field. diff --git a/docs/migration-guides/1.1.0/index.md b/docs/migration-guides/1.1.0/index.md new file mode 100644 index 000000000..6de78c8a4 --- /dev/null +++ b/docs/migration-guides/1.1.0/index.md @@ -0,0 +1,57 @@ +# Vue Storefront for Magento 1.1.0 + +Vue Storefront for Magento 1.1.0 contains backward-incompatible changes. To review these backward-incompatible changes, see + +[1.1.0 **Backward incompatible changes reference** ](./1.1.0-bic.md) + +## Vue Storefront for Magento 1.1.0 highlights + +Vue Storefront for Magento 1.1.0 provides a few new features like SEO-friendly URLs, SEO meta tags, Google Cloud CDN support, and more. + +## Features + +- feat!: implement magento URL rewrites [https://github.com/vuestorefront/magento2/pull/1321](https://github.com/vuestorefront/magento2/pull/1321/files) +- feat: add GC CDN support [https://github.com/vuestorefront/magento2/pull/1338](https://github.com/vuestorefront/magento2/pull/1338) +- feat: implement a meta info on cms, product,category page [https://github.com/vuestorefront/magento2/pull/1326](https://github.com/vuestorefront/magento2/pull/1326) +- feat: implement add a grouped product to cart [https://github.com/vuestorefront/magento2/pull/1324](https://github.com/vuestorefront/magento2/pull/1324) +- feat: make security connection optional by default [https://github.com/vuestorefront/magento2/pull/1354](https://github.com/vuestorefront/magento2/pull/1354) + +### Bugfix + +- fix: product list page is sometimes unresponsive after the store switch [https://github.com/vuestorefront/magento2/pull/1352](https://github.com/vuestorefront/magento2/pull/1352) +- fix: logout doesn't work after reload of the MyAccount page [https://github.com/vuestorefront/magento2/pull/1347](https://github.com/vuestorefront/magento2/pull/1347) +- fix: pods do not get up after deployment [https://github.com/vuestorefront/magento2/pull/1351](https://github.com/vuestorefront/magento2/pull/1351) +- fix: add missing canary URL protocols [https://github.com/vuestorefront/magento2/pull/1349](https://github.com/vuestorefront/magento2/pull/1349) +- fix: product is not marked as added to the wishlist [https://github.com/vuestorefront/magento2/pull/1346](https://github.com/vuestorefront/magento2/pull/1346) +- fix: fix the issue with a store switching on the customer account [https://github.com/vuestorefront/magento2/pull/1345](https://github.com/vuestorefront/magento2/pull/1345) +- fix: fix a message about the submitted review [https://github.com/vuestorefront/magento2/pull/1331](https://github.com/vuestorefront/magento2/pull/1331) +- fix: vsf2 not working with docker-compose [https://github.com/vuestorefront/magento2/pull/1337](https://github.com/vuestorefront/magento2/pull/1337) +- fix: pods have warnings error after deployment [https://github.com/vuestorefront/magento2/pull/1335](https://github.com/vuestorefront/magento2/pull/1335) +- fix: fix product detail components [https://github.com/vuestorefront/magento2/pull/1330](https://github.com/vuestorefront/magento2/pull/1330) +- fix: downloadableProduct might not have been initialized [https://github.com/vuestorefront/magento2/pull/1325](https://github.com/vuestorefront/magento2/pull/1325) +- fix: getAvailableShippingMethods query variables [https://github.com/vuestorefront/magento2/pull/1318](https://github.com/vuestorefront/magento2/pull/1318) +- fix: update CDN default configuration [https://github.com/vuestorefront/magento2/pull/1372](https://github.com/vuestorefront/magento2/pull/1372) +- fix: getMagentoImage reading 'split' error [https://github.com/vuestorefront/magento2/pull/1373](https://github.com/vuestorefront/magento2/pull/1373) +- fix: cart type error in the console after opening mini cart as a guest [https://github.com/vuestorefront/magento2/pull/1374](https://github.com/vuestorefront/magento2/pull/1374) +- fix: product detail gallery is missing when browsing products using mobile [https://github.com/vuestorefront/magento2/pull/1375](https://github.com/vuestorefront/magento2/pull/1375) +- fix: ssr reload on the grouped product page [https://github.com/vuestorefront/magento2/pull/1376](https://github.com/vuestorefront/magento2/pull/1376) +- fix: product list page items on product page list page zero prices issues [https://github.com/vuestorefront/magento2/pull/1379](https://github.com/vuestorefront/magento2/pull/1379) +- +### Chore + +- chore: removed deprecated composables packages from the repository [https://github.com/vuestorefront/magento2/pull/1322](https://github.com/vuestorefront/magento2/pull/1322) + +### Docs + +- docs: fixed breaking change reference link [https://github.com/vuestorefront/magento2/pull/1350](https://github.com/vuestorefront/magento2/pull/1350) +- docs: fix wording + add installation video [https://github.com/vuestorefront/magento2/pull/1319](https://github.com/vuestorefront/magento2/pull/1319) +- docs: removed outdated information about cors configuration [https://github.com/vuestorefront/magento2/pull/1378](https://github.com/vuestorefront/magento2/pull/1378) + +### Repository + +- ci: fix code not checked out [https://github.com/vuestorefront/magento2/pull/1327](https://github.com/vuestorefront/magento2/pull/1327) +- ci: refactor k6 action to add new env vars [https://github.com/vuestorefront/magento2/pull/1287](https://github.com/vuestorefront/magento2/pull/1287) + +### Credits + +Huge thanks to @[sethidden](https://github.com/sethidden), [@sequensucks](https://github.com/sequensucks), [@Frodigo](https://github.com/Frodigo), [@bartoszherba](https://github.com/bartoszherba) diff --git a/docs/migration-guides/index.md b/docs/migration-guides/index.md index 850366705..96cecf9d9 100644 --- a/docs/migration-guides/index.md +++ b/docs/migration-guides/index.md @@ -1,5 +1,6 @@ # Migration guides ## 1.0.x +- [1.1.0](./1.1.0/) - [1.0.2](./1.0.2/) - [1.0.1](./1.0.1/) - [1.0.0](./1.0.0/) diff --git a/internals/eslint-import/package.json b/internals/eslint-import/package.json index 45367031d..770da1b85 100644 --- a/internals/eslint-import/package.json +++ b/internals/eslint-import/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/eslint-config-import", - "version": "1.0.2", + "version": "1.1.0", "author": "Heitor Ramon Ribeiro ", "license": "MIT", "scripts": { diff --git a/internals/eslint-jest/package.json b/internals/eslint-jest/package.json index 16ac89b3f..ebd040b33 100644 --- a/internals/eslint-jest/package.json +++ b/internals/eslint-jest/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/eslint-config-jest", - "version": "1.0.2", + "version": "1.1.0", "author": "Heitor Ramon Ribeiro ", "license": "MIT", "scripts": { diff --git a/internals/eslint-typescript/package.json b/internals/eslint-typescript/package.json index 6c4cda539..254e832f7 100644 --- a/internals/eslint-typescript/package.json +++ b/internals/eslint-typescript/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/eslint-config-typescript", - "version": "1.0.2", + "version": "1.1.0", "author": "Heitor Ramon Ribeiro ", "license": "MIT", "scripts": { diff --git a/internals/eslint-vue/package.json b/internals/eslint-vue/package.json index cbc4e6fbb..918b54422 100644 --- a/internals/eslint-vue/package.json +++ b/internals/eslint-vue/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/eslint-config-vue", - "version": "1.0.2", + "version": "1.1.0", "author": "Heitor Ramon Ribeiro ", "license": "MIT", "scripts": { diff --git a/internals/eslint/package.json b/internals/eslint/package.json index c92035777..4fc1e1a73 100644 --- a/internals/eslint/package.json +++ b/internals/eslint/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/eslint-config-base", - "version": "1.0.2", + "version": "1.1.0", "author": "Heitor Ramon Ribeiro ", "license": "MIT", "scripts": { diff --git a/package.json b/package.json index 4ed386efb..498f976d1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "build": "yarn build:api-client && yarn build:theme", "build:api-client": "cd packages/api-client && yarn build", "build:theme": "cd packages/theme && yarn build", - "build:composables": "cd packages/composables && yarn build", "contributors:add": "all-contributors add", "contributors:generate": "all-contributors generate", "dev:api-client": "cd packages/api-client && yarn dev", @@ -26,7 +25,6 @@ "lint": "eslint . --ext .ts,.vue", "prepare": "[ -d '.husky' ] && (husky install && shx rm -rf .git/hooks && shx ln -s ../.husky .git/hooks) || true", "publish:api-client": "node ./scripts/publishApi.js", - "publish:composables": "node ./scripts/publishComposable.js", "start": "cd packages/theme && yarn start", "start:local": "cd packages/theme && yarn start:local", "test": "yarn test:api-client && yarn test:theme", diff --git a/packages/api-client/package.json b/packages/api-client/package.json index c9a2b9374..e7ad8aa7f 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/magento-api", - "version": "1.0.2", + "version": "1.1.0", "sideEffects": false, "homepage": "https://github.com/vuestorefront/magento2", "bugs": { diff --git a/packages/api-client/src/api/addProductToWishList/addProductsToWishlist.ts b/packages/api-client/src/api/addProductToWishList/addProductsToWishlist.ts index c95c91da9..906d59713 100644 --- a/packages/api-client/src/api/addProductToWishList/addProductsToWishlist.ts +++ b/packages/api-client/src/api/addProductToWishList/addProductsToWishlist.ts @@ -127,6 +127,13 @@ export default gql` } } } + ... on GroupedProduct { + items { + product { + sku + } + } + } } } page_info { diff --git a/packages/api-client/src/api/cmsPage/cmsPage.ts b/packages/api-client/src/api/cmsPage/cmsPage.ts index db59d6814..f31a61f7f 100644 --- a/packages/api-client/src/api/cmsPage/cmsPage.ts +++ b/packages/api-client/src/api/cmsPage/cmsPage.ts @@ -5,9 +5,10 @@ export default gql` cmsPage(identifier:$identifier) { identifier content - title, + title meta_title meta_description + meta_keywords content_heading } } diff --git a/packages/api-client/src/api/getAvailableShippingMethods/GuestAvailableShippingMethods.ts b/packages/api-client/src/api/getAvailableShippingMethods/GuestAvailableShippingMethods.ts index f8669eaf0..fca7eb7b5 100644 --- a/packages/api-client/src/api/getAvailableShippingMethods/GuestAvailableShippingMethods.ts +++ b/packages/api-client/src/api/getAvailableShippingMethods/GuestAvailableShippingMethods.ts @@ -1,8 +1,8 @@ import gql from 'graphql-tag'; export default gql` - query GuestAvailableShippingMethods($cart_id: String!) { - cart(cart_id:$cart_id) { + query GuestAvailableShippingMethods($cartId: String!) { + cart(cart_id:$cartId) { shipping_addresses { available_shipping_methods { amount { diff --git a/packages/api-client/src/api/productDetail/productDetailsQuery.ts b/packages/api-client/src/api/productDetail/productDetailsQuery.ts index 64c837a58..7dd0e79d9 100644 --- a/packages/api-client/src/api/productDetail/productDetailsQuery.ts +++ b/packages/api-client/src/api/productDetail/productDetailsQuery.ts @@ -129,6 +129,47 @@ export default gql` sku } } + ... on GroupedProduct { + items { + position + qty + product { + uid + sku + name + stock_status + only_x_left_in_stock + price_range { + maximum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + minimum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + } + thumbnail { + url + position + disabled + label + } + } + } + } } } } diff --git a/packages/api-client/src/api/products/productsList.ts b/packages/api-client/src/api/products/productsList.ts index b84fc32fb..f5f74cf3c 100644 --- a/packages/api-client/src/api/products/productsList.ts +++ b/packages/api-client/src/api/products/productsList.ts @@ -75,6 +75,13 @@ export default gql` } } } + ... on GroupedProduct { + items { + product { + sku + } + } + } } page_info { current_page diff --git a/packages/api-client/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts b/packages/api-client/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts index 986bd1391..dea36ac7d 100644 --- a/packages/api-client/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts +++ b/packages/api-client/src/api/removeProductsFromWishlist/removeProductsFromWishlist.ts @@ -127,6 +127,13 @@ export default gql` } } } + ... on GroupedProduct { + items { + product { + sku + } + } + } } } page_info { diff --git a/packages/api-client/src/api/route/route.ts b/packages/api-client/src/api/route/route.ts index df37c5c2f..3d1f4fd23 100644 --- a/packages/api-client/src/api/route/route.ts +++ b/packages/api-client/src/api/route/route.ts @@ -4,12 +4,15 @@ import gql from 'graphql-tag'; export default gql` query route($url: String!) { route(url: $url) { - relative_url - redirect_code type + ... on ProductInterface { + sku + } ... on CategoryTree { uid - id + } + ... on CmsPage { + identifier } } } diff --git a/packages/api-client/src/api/wishlist/wishlist.ts b/packages/api-client/src/api/wishlist/wishlist.ts index cbb933c90..941e3718b 100644 --- a/packages/api-client/src/api/wishlist/wishlist.ts +++ b/packages/api-client/src/api/wishlist/wishlist.ts @@ -127,6 +127,13 @@ export default gql` } } } + ... on GroupedProduct { + items { + product { + sku + } + } + } } } page_info { diff --git a/packages/composables/.all-contributorsrc b/packages/composables/.all-contributorsrc deleted file mode 100644 index 4e6c0800a..000000000 --- a/packages/composables/.all-contributorsrc +++ /dev/null @@ -1,96 +0,0 @@ -{ - "projectName": "@vue-storefront/magento", - "projectOwner": "vuestorefront", - "repoType": "github", - "repoHost": "https://github.com", - "files": [ - "README.md" - ], - "imageSize": 100, - "commit": true, - "commitConvention": "angular", - "contributors": [ - { - "login": "bloodf", - "name": "Heitor Ramon Ribeiro", - "avatar_url": "https://avatars.githubusercontent.com/u/1626923?v=4", - "profile": "http://heitorramon.com/", - "contributions": [ - "code", - "maintenance", - "projectManagement" - ] - }, - { - "login": "domideimel", - "name": "Dominik Deimel", - "avatar_url": "https://avatars.githubusercontent.com/u/32941053?v=4", - "profile": "https://dominikdeimel.com/", - "contributions": [ - "code", - "doc" - ] - }, - { - "login": "LiorLindvor", - "name": "Lior Lindvor", - "avatar_url": "https://avatars.githubusercontent.com/u/6757942?v=4", - "profile": "http://cyberfuze.com/", - "contributions": [ - "code" - ] - }, - { - "login": "alefbarbeli", - "name": "Alef Barbeli", - "avatar_url": "https://avatars.githubusercontent.com/u/7727647?v=4", - "profile": "https://github.com/alefbarbeli", - "contributions": [ - "doc" - ] - }, - { - "login": "hcmlopes", - "name": "Henrique Lopes", - "avatar_url": "https://avatars.githubusercontent.com/u/20449158?v=4", - "profile": "https://github.com/hcmlopes", - "contributions": [ - "doc" - ] - }, - { - "login": "filrak", - "name": "Filip Rakowski", - "avatar_url": "https://avatars.githubusercontent.com/u/15185752?v=4", - "profile": "https://rakowski.dev/", - "contributions": [ - "question", - "mentoring", - "review" - ] - }, - { - "login": "filipsobol", - "name": "Filip Sobol", - "avatar_url": "https://avatars.githubusercontent.com/u/4145208?v=4", - "profile": "https://github.com/filipsobol", - "contributions": [ - "question", - "mentoring", - "review" - ] - }, - { - "login": "andrzejewsky", - "name": "Patryk Andrzejewski", - "avatar_url": "https://avatars.githubusercontent.com/u/7943292?v=4", - "profile": "https://github.com/andrzejewsky", - "contributions": [ - "question", - "mentoring", - "review" - ] - } - ], - "contributorsPerLine": 7 -} diff --git a/packages/composables/.editorconfig b/packages/composables/.editorconfig deleted file mode 100644 index 7ac5caaf7..000000000 --- a/packages/composables/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.{js,jsx,ts,tsx}] -indent_style = space -indent_size = 2 -end_of_line = lf -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 diff --git a/packages/composables/.gitignore b/packages/composables/.gitignore deleted file mode 100644 index f591c8b33..000000000 --- a/packages/composables/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -lib -node_modules -coverage -client -server \ No newline at end of file diff --git a/packages/composables/README.md b/packages/composables/README.md deleted file mode 100644 index aa0f4886a..000000000 --- a/packages/composables/README.md +++ /dev/null @@ -1,138 +0,0 @@ -
-   -
- -## [deprecated] @vue-storefront/magento - -**If you are looking for Ve Storefront integration -for Magento 2, please follow these links:** -- [Vue Storefront for Magento 2 integration repository](https://github.com/vuestorefront/magento2) -- [Vue Storefront for Magento 2 integration documentation](https://docs.vuestorefront.io/magento/) - - - -[![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors-) - - - -## How to start if you want to try out the integration - -Please follow the [installation guide](https://docs.vuestorefront.io/magento/installation-setup/installation.html) - -## How to start if you want to contribute? - -Want to contribute? Ping us on `magento2` channel on [our Discord](http://discord.vuestorefront.io)! - -### Requirements: -- NodeJS v16 or later -- Yarn -- Magento >= v2.4.3 instance for GraphQL endpoint -- Change Magento GraphQL Query Complexity and Depth values - -> Don't forget to change the Magento GraphQL Query Complexity and Depth values -Magento 2 by default has a lower value for the complexity of 300, and a higher value for the depth of 20. [Magento 2 - Issue #32427](https://github.com/magento/magento2/issues/32427#issuecomment-860478483) - ->The changes are required, due to the size of the queries and mutations in the `api-client` implementation. - ->To do this changes, you can use the [Magento 2 module](https://github.com/caravelx/module-graphql-config), which adds a configuration panel to your admin, or do this changes manually. - -To install the Magento 2 GraphQL Config module, on your Magento installation execute: - -```bash -composer require caravelx/module-graphql-config - -php bin/magento module:enable Caravel_GraphQlConfig - -php bin/magento setup:upgrade - -php bin/magento setup:di:compile - -php bin/magento setup:static-content:deploy -``` - -Find more information about the module [GraphQl Custom Config](https://github.com/caravelx/module-graphql-config) - -### Steps -1. Fork the repo -2. Clone your fork of the repo - ``` - example: - git clone https://github.com/vuestorefront/magento2.git - cd magento2 - ``` -3. Checkout develop branch `git checkout develop` -4. Run `yarn` to install dependencies -5. Copy `.env.example` to `.env` - ```bash - $ cp packages/theme/.env.example packages/theme/.env - ``` -6. Update `VSF_MAGENTO_GRAPHQL_URL` with url to Magento >=2.4.2 GraphQL endpoint, and the other variable accordingly to your store configurations. - ``` - VSF_MAGENTO_GRAPHQL_URL=https://{YOUR_SITE_FRONT_URL}/graphql - ``` -7. Build dependencies `yarn build:api-client && yarn build:composables` -8. Run `yarn dev:theme` to run theme. You can find other commands in `package.json` -- If you need HMR on Api Client/Composables run `yarn dev:api-client` or `yarn dev:composables` on a separate terminal window. - -## Resources - -- [Vue Storefront Documentation](https://docs.vuestorefront.io/v2/) -- [Magento 2 integration Documentation (WIP)](https://docs.vuestorefront.io/magento) -- [Community Chat](http://discord.vuestorefront.io) - -## Support - -If you have any questions about this integration we will be happy to answer them on `magento2` channel on [our Discord](http://discord.vuestorefront.io). - -## Contributors ✨ - -### Honorable Mentions -- [Caravel x](https://www.caravelx.com/) -- [Cyberfuze](https://cyberfuze.com/) -- [Leonex](https://www.leonex.de/) - -Thanks go to these wonderful people πŸ™Œ: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Heitor Ramon Ribeiro

πŸ’» 🚧 πŸ“– πŸ“†

Alef Barbeli

πŸ’» πŸ“–

Henrique Lopes

πŸ’» πŸ“–

ĐaΜ£i LoΜ£Μ‚c LeΜ‚ Quang

πŸ’»

Bogdan Podlesnii

πŸ’»

Patrick Monteiro

πŸ’»

Kevin Gorjan

πŸ’» πŸ“–

Bartosz Herba

πŸ’» πŸ“– 🚧 πŸ§‘β€πŸ« πŸ‘€

Marcin Kwiatkowski

πŸ’» πŸ“† πŸ’Ό πŸ“– πŸ€” 🚧 πŸ§‘β€πŸ« πŸ‘€

Filip Rakowski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€

Filip Sobol

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ πŸ“–

Patryk Andrzejewski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€

Renan Oliveira

πŸ”§ πŸ”Œ

Dominik Deimel

πŸ’» πŸ“–

Lior Lindvor

πŸ’»

Artur Tagisow

πŸ’»

Jonathan Ribas

πŸ’»

Ali Ghanei

πŸ’»

Maya Shavin

πŸ“–

Alexander Devitsky

πŸ’»

Diego Alba

πŸ’»
- - - - - - -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/packages/composables/__tests__/_mountComposable.ts b/packages/composables/__tests__/_mountComposable.ts deleted file mode 100644 index cfebcb992..000000000 --- a/packages/composables/__tests__/_mountComposable.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { shallowMount } from '@vue/test-utils'; -import { defineComponent } from '@vue/composition-api'; - -const mountComposable = (composableFn) => { - const component = defineComponent({ - setup() { - return composableFn(); - }, - template: '
my component
', - }); - - return shallowMount(component); -}; - -export default mountComposable; diff --git a/packages/composables/__tests__/getters/productHelpers.spec.ts b/packages/composables/__tests__/getters/productHelpers.spec.ts deleted file mode 100644 index d09b187f1..000000000 --- a/packages/composables/__tests__/getters/productHelpers.spec.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { Product } from '@vue-storefront/magento-api'; -import { - getAttributes, - getCategoryIds, - getCoverImage, - getFiltered, - getGallery, - getId, - getName, - getPrice, - getSlug, -} from '../../src/getters/productGetters'; - -const product = { - options_container: null, - meta_description: null, - meta_keyword: null, - meta_title: null, - description: { - html: '

The sporty Joust Duffle Bag can\'t be beat - not in the gym, not on the luggage carousel, not anywhere. Big enough to haul a basketball or soccer ball and some sneakers with plenty of room to spare, it\'s ideal for athletes with places to go.

\n

    \n
  • Dual top handles.
  • \n
  • Adjustable shoulder strap.
  • \n
  • Full-length zipper.
  • \n
  • L 29" x W 13" x H 11".
  • \n
', - __typename: 'ComplexTextValue', - }, - short_description: { html: '', __typename: 'ComplexTextValue' }, - uid: 'MQ==', - __typename: 'SimpleProduct', - sku: '24-MB01', - name: 'Joust Duffle Bag', - stock_status: 'IN_STOCK', - only_x_left_in_stock: null, - rating_summary: 50, - thumbnail: { - url: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - position: null, - disabled: null, - label: 'Joust Duffle Bag', - __typename: 'ProductImage', - }, - price_range: { - maximum_price: { - final_price: { - currency: 'USD', - value: 34, - __typename: 'Money', - }, - regular_price: { currency: 'USD', value: 34, __typename: 'Money' }, - __typename: 'ProductPrice', - }, - minimum_price: { - final_price: { - currency: 'USD', - value: 34, - __typename: 'Money', - }, - regular_price: { currency: 'USD', value: 34, __typename: 'Money' }, - __typename: 'ProductPrice', - }, - __typename: 'PriceRange', - }, - url_key: 'joust-duffle-bag', - url_rewrites: [{ - url: 'joust-duffle-bag.html', - __typename: 'UrlRewrite', - }, { - url: 'gear/joust-duffle-bag.html', - __typename: 'UrlRewrite', - }, { url: 'gear/bags/joust-duffle-bag.html', __typename: 'UrlRewrite' }], - categories: [{ - uid: 'Mw==', - name: 'Gear', - url_suffix: '.html', - url_path: 'gear', - breadcrumbs: null, - __typename: 'CategoryTree', - }, { - uid: 'NA==', - name: 'Bags', - url_suffix: '.html', - url_path: 'gear/bags', - breadcrumbs: [{ - category_name: 'Gear', - category_url_path: 'gear', - __typename: 'Breadcrumb', - }], - __typename: 'CategoryTree', - }], - review_count: 2, - reviews: { - items: [{ - average_rating: 60, - ratings_breakdown: [{ - name: 'Rating', - value: '3', - __typename: 'ProductReviewRating', - }], - __typename: 'ProductReview', - }, { - average_rating: 40, - ratings_breakdown: [{ - name: 'Rating', - value: '2', - __typename: 'ProductReviewRating', - }], - __typename: 'ProductReview', - }], - __typename: 'ProductReviews', - }, - small_image: { - url: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - position: null, - disabled: null, - label: 'Joust Duffle Bag', - __typename: 'ProductImage', - }, - image: { - url: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - position: null, - disabled: null, - label: 'Joust Duffle Bag', - __typename: 'ProductImage', - }, - media_gallery: [{ - url: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - position: 1, - disabled: false, - label: 'Image', - __typename: 'ProductImage', - }], -} as unknown as Product; - -describe('[magento-getters] product getters', () => { - it('returns default values', () => { - expect(getName(null)).toBe(''); - expect(getSlug(null)).toBe(''); - expect(getGallery(null)).toEqual([]); - expect(getFiltered(null)).toEqual([]); - }); - - it('returns name', () => { - expect(getName(product)).toBe('Joust Duffle Bag'); - }); - - it('returns slug', () => { - expect(getSlug(product)).toBe('/joust-duffle-bag.html'); - }); - - it('returns price', () => { - expect(getPrice(product)).toEqual({ regular: 34, special: null }); - }); - - it('returns gallery', () => { - expect(getGallery(product)).toEqual([ - { - small: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - normal: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - big: 'https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg', - }, - ]); - }); - - it('returns cover image', () => { - // @ts-expect-error intentional lack of image - expect(getCoverImage({})).toEqual(null); - expect(getCoverImage(product)).toEqual('https://m2.caravelx.com/media/catalog/product/cache/746ba992681b73af7e339699b3e0caf7/m/b/mb01-blue-0.jpg'); - }); - - it('returns product categories', () => { - expect(getCategoryIds(product)).toEqual([ - 'Mw==', - 'NA==', - ]); - }); - - it('returns product ID', () => { - expect(getId(product)).toEqual('MQ=='); - }); - - it('returns empty array if there is no product', () => { - expect(getAttributes(null)).toEqual({}); - }); -}); diff --git a/packages/composables/__tests__/setup.ts b/packages/composables/__tests__/setup.ts deleted file mode 100644 index 72534644a..000000000 --- a/packages/composables/__tests__/setup.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Vue from 'vue'; -import VueCompositionApi from '@vue/composition-api'; - -// eslint-disable-next-line unicorn/prefer-module -require('jsdom-global')(); - -Vue.config.productionTip = false; -Vue.config.devtools = false; - -Vue.use(VueCompositionApi); diff --git a/packages/composables/api-extractor.json b/packages/composables/api-extractor.json deleted file mode 100644 index 52c8609ee..000000000 --- a/packages/composables/api-extractor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../api-extractor.base.json", - "mainEntryPointFilePath": "./lib/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./lib/.d.ts" - }, - "docModel": { - "apiJsonFilePath": "/docs/api-reference/.api.json" - } -} diff --git a/packages/composables/babel.config.js b/packages/composables/babel.config.js deleted file mode 100644 index 6c66aa368..000000000 --- a/packages/composables/babel.config.js +++ /dev/null @@ -1,10 +0,0 @@ -// eslint-disable-next-line unicorn/prefer-module -module.exports = { - presets: [ - ['@babel/preset-env', { - targets: { - node: 'current', - }, - }], - ], -}; diff --git a/packages/composables/jest.config.js b/packages/composables/jest.config.js deleted file mode 100644 index 3e0bbf46f..000000000 --- a/packages/composables/jest.config.js +++ /dev/null @@ -1,70 +0,0 @@ -/* eslint-disable unicorn/prefer-module */ -module.exports = { - globals: { - __DEV__: true, - }, - coverageReporters: [ - 'lcov', - ], - coverageThreshold: { - global: {}, - }, - coveragePathIgnorePatterns: [ - '/node_modules/', - '.d.ts$', - '/__mocks__/', - ], - coverageDirectory: './coverage/', - moduleNameMapper: { - '^@/(.*)$': '/$1', - '^~/(.*)$': '/$1', - }, - testEnvironment: 'jsdom', - transform: { - '^.+\\.(m)js$': 'babel-jest', - '^.+\\.ts$': 'ts-jest', - }, - transformIgnorePatterns: [ - 'node_modules', - '/node_modules', - ], - testMatch: [ - '/**/__tests__/**/*spec.[jt]s?(x)', - ], - watchPlugins: [ - 'jest-watch-typeahead/filename', - 'jest-watch-typeahead/testname', - [ - 'jest-watch-toggle-config', - { - setting: 'verbose', - }, - ], - [ - 'jest-watch-toggle-config', - { - setting: 'collectCoverage', - }, - ], - [ - 'jest-watch-toggle-config', - { - setting: 'notify', - }, - ], - [ - 'jest-watch-toggle-config', - { - setting: 'bail', - }, - ], - ], - collectCoverageFrom: [ - '/composables/**/*.ts', - ], - moduleFileExtensions: [ - 'js', - 'json', - 'ts', - ], -}; diff --git a/packages/composables/nuxt/cookie.js b/packages/composables/nuxt/cookie.js deleted file mode 100644 index 21bcd8ed3..000000000 --- a/packages/composables/nuxt/cookie.js +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -import CookieUniversal from 'cookie-universal'; - -const baseSetCookieOptions = { - sameSite: 'lax', - path: '/', -}; - -const isBrowser = () => typeof window !== 'undefined'; - -export default (req, res) => { - const cookie = isBrowser() ? CookieUniversal() : CookieUniversal(req, res); - - const setCookie = (id, data, options = {}) => { - cookie.set(id, data, { - ...baseSetCookieOptions, - ...options, - }); - }; - - const removeCookie = (id, options = {}) => { - cookie.remove(id, { - ...baseSetCookieOptions, - ...options, - }); - }; - - const getCookies = (id, options = {}) => cookie.get(id, { - ...options, - }); - - return { - setCookie, - removeCookie, - getCookies, - }; -}; diff --git a/packages/composables/nuxt/defaultConfig.js b/packages/composables/nuxt/defaultConfig.js deleted file mode 100644 index dee433b45..000000000 --- a/packages/composables/nuxt/defaultConfig.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - cookies: { - currencyCookieName: 'vsf-currency', - countryCookieName: 'vsf-country', - localeCookieName: 'vsf-locale', - cartCookieName: 'vsf-cart', - customerCookieName: 'vsf-customer', - storeCookieName: 'vsf-store', - messageCookieName: 'vsf-message', - }, -}; diff --git a/packages/composables/nuxt/helpers/index.js b/packages/composables/nuxt/helpers/index.js deleted file mode 100644 index 5abbf3f89..000000000 --- a/packages/composables/nuxt/helpers/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import defaultConfig from '@vue-storefront/magento/nuxt/defaultConfig'; - -export const getLocaleSettings = (app, moduleOptions) => { - let localeSettings = {}; - - if (moduleOptions.cookies) { - localeSettings = { - locale: app.$cookies.get(moduleOptions.cookies.localeCookieName), - country: app.$cookies.get(moduleOptions.cookies.countryCookieName), - currency: app.$cookies.get(moduleOptions.cookies.currencyCookieName), - }; - } - - return { - locale: app.i18n.locale || (localeSettings.locale || moduleOptions.locale || defaultConfig.locale), - country: localeSettings.country || moduleOptions.country || defaultConfig.country, - currency: localeSettings.currency || moduleOptions.currency || defaultConfig.currency, - }; -}; - -export const mapConfigToSetupObject = ({ moduleOptions, app, additionalProperties = {} }) => ({ - ...defaultConfig, - ...moduleOptions, - ...additionalProperties, - ...getLocaleSettings(app, moduleOptions), -}); diff --git a/packages/composables/nuxt/index.js b/packages/composables/nuxt/index.js deleted file mode 100644 index aaed24be7..000000000 --- a/packages/composables/nuxt/index.js +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint-disable unicorn/prefer-module */ -const path = require('path'); - -const mapI18nSettings = (i18n) => ({ - locales: i18n.locales.map(({ label, code }) => ({ name: code, label })), -}); - -const isNuxtI18nUsed = (moduleOptions) => moduleOptions.i18n && moduleOptions.i18n.useNuxtI18nConfig; - -const getMissingFields = (options) => [ - 'locales', -].filter((o) => options[o] === undefined); - -export default function composablesModule(moduleOptions) { - const options = isNuxtI18nUsed(moduleOptions) - ? { - ...moduleOptions, - ...mapI18nSettings(this.options.i18n), - } - : moduleOptions; - - const missingFields = getMissingFields(options); - - if (missingFields.length > 0) { - throw new Error(`Please provide missing i18n fields: (${missingFields.join(', ')})`); - } - - this.extendBuild((config) => { - // eslint-disable-next-line no-param-reassign - config.resolve.alias['@vue-storefront/magento-api$'] = require.resolve('@vue-storefront/magento-api'); - }); - - this.addPlugin({ - src: path.resolve(__dirname, './plugin.js'), - options, - }); -} diff --git a/packages/composables/nuxt/plugin.js b/packages/composables/nuxt/plugin.js deleted file mode 100644 index 81902f18a..000000000 --- a/packages/composables/nuxt/plugin.js +++ /dev/null @@ -1,75 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -// for removal of reliance on Vue Storefront Core -import { integrationPlugin } from '@vue-storefront/magento-theme/helpers/integrationPlugin'; -import { mapConfigToSetupObject } from '@vue-storefront/magento/nuxt/helpers'; -import defaultConfig from '@vue-storefront/magento/nuxt/defaultConfig'; -import cookie from '@vue-storefront/magento/nuxt/cookie'; - -const moduleOptions = JSON.parse('<%= JSON.stringify(options) %>'); - -export default integrationPlugin(({ - app, res, req, integration, -}) => { - const cartCookieName = moduleOptions.cookies?.cartCookieName || defaultConfig.cookies.cartCookieName; - const customerCookieName = moduleOptions.cookies?.customerCookieName || defaultConfig.cookies.customerCookieName; - const storeCookieName = moduleOptions.cookies?.storeCookieName || defaultConfig.cookies.storeCookieName; - const currencyCookieName = moduleOptions.cookies?.currencyCookieName || defaultConfig.cookies.currencyCookieName; - const localeCookieName = moduleOptions.cookies?.localeCookieName || defaultConfig.cookies.localeCookieName; - const countryCookieName = moduleOptions.cookies?.countryCookieName || defaultConfig.cookies.countryCookieName; - - const { - setCookie, - removeCookie, - getCookies, - } = cookie(req, res); - - const getCartId = () => getCookies(cartCookieName); - - const setCartId = (id) => (!id ? removeCookie(cartCookieName) : setCookie(cartCookieName, id)); - - const getCustomerToken = () => getCookies(customerCookieName); - - const setCustomerToken = (token) => (!token ? removeCookie(customerCookieName) : setCookie(customerCookieName, token)); - - const getStore = () => getCookies(storeCookieName); - - const setStore = (id) => (!id ? removeCookie(storeCookieName) : setCookie(storeCookieName, id)); - - const getCurrency = () => getCookies(currencyCookieName); - - const setCurrency = (id) => (!id ? removeCookie(currencyCookieName) : setCookie(currencyCookieName, id)); - - const getLocale = () => getCookies(localeCookieName); - - const setLocale = (id) => (!id ? removeCookie(localeCookieName) : setCookie(localeCookieName, id)); - - const getCountry = () => getCookies(countryCookieName); - - const setCountry = (id) => (!id ? removeCookie(countryCookieName) : setCookie(countryCookieName, id)); - - const settings = mapConfigToSetupObject({ - moduleOptions, - app, - additionalProperties: { - state: { - // Cart - getCartId, - setCartId, - // Customer - getCustomerToken, - setCustomerToken, - // Store - getStore, - setStore, - getCurrency, - setCurrency, - getLocale, - setLocale, - getCountry, - setCountry, - }, - }, - }); - - integration.configure('magento', settings); -}); diff --git a/packages/composables/package.json b/packages/composables/package.json deleted file mode 100644 index 27d008f1c..000000000 --- a/packages/composables/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@vue-storefront/magento", - "version": "1.0.2", - "license": "MIT", - "homepage": "https://github.com/vuestorefront/magento2", - "bugs": { - "url": "https://github.com/vuestorefront/magento2/issues" - }, - "sideEffects": false, - "main": "./lib/index.js", - "exports": { - ".": "./lib/index.js", - "./nuxt": "./nuxt/index.js", - "./package.json": "./package.json" - }, - "types": "lib/index.d.ts", - "scripts": { - "build": "yarn build:clear && yarn build:package && yarn build:types", - "build:clear": "rimraf lib", - "build:package": "node ../../scripts/build --file=src/index.ts", - "build:types": "tsc --emitDeclarationOnly", - "dev": "yarn build:package --watch", - "lint:fix": "eslint ./src --ext .ts,.vue --fix", - "precommit": "lint-staged", - "prepublish": "yarn build", - "test": "jest", - "update:check": "ncu", - "update:update": "ncu -u" - }, - "dependencies": { - "@vue-storefront/core": "~2.5.6", - "@vue-storefront/magento-api": "^1.0.2", - "@vue/composition-api": "^1.4.1", - "cookie-universal": "^2.1.5", - "vue": "^2.6.14", - "vue-demi": "^0.12.1" - }, - "devDependencies": { - "@types/js-cookie": "^3.0.1", - "@vue/test-utils": "^1.3.0", - "jsdom": "^19.0.0", - "jsdom-global": "^3.0.2", - "vue-template-compiler": "^2.6.x" - }, - "files": [ - "lib/**/*", - "nuxt/**/*", - "types/**/*" - ], - "publishConfig": { - "access": "public", - "registry": "https://registry.npmjs.org" - }, - "engines": { - "node": ">=16.x" - } -} diff --git a/packages/composables/src/api-extractor-data.ts b/packages/composables/src/api-extractor-data.ts deleted file mode 100644 index d0ad93ce5..000000000 --- a/packages/composables/src/api-extractor-data.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * `composeables` and `getters` for Magento 2 integration for Vue Storefront 2. - * - * @remarks - * The `@vue-storefront/magento2` library includes everything needed to fetch data from the - * Magento 2 eCommerce platform. This includes API client configuration, API endpoints, and - * GraphQL types and fragments. - * - * @packageDocumentation - */ - -export * from './index'; -export * from './factories/useAddressesFactory'; -export * from './factories/useCartFactory'; -export * from './factories/useCategorySearchFactory'; -export * from './factories/useConfigFactory'; -export * from './factories/useContentFactory'; -export * from './factories/useCountrySearchFactory'; -export * from './factories/useCustomQueryFactory'; -export * from './factories/useExternalCheckoutFactory'; -export * from './factories/useForgotPasswordFactory'; -export * from './factories/useGetShippingMethodsFactory'; -export * from './factories/useGuestUserFactory'; -export * from './factories/useMutationQueryFactory'; -export * from './factories/useNewsletterFactory'; -export * from './factories/usePaymentProviderFactory'; -export * from './factories/useRelatedProductsFactory'; -export * from './factories/useReviewFactory'; -export * from './factories/useUpsellProductsFactory'; -export * from './factories/useUrlResolverFactory'; diff --git a/packages/composables/src/composables/useAddresses/index.ts b/packages/composables/src/composables/useAddresses/index.ts deleted file mode 100644 index 5f697fad8..000000000 --- a/packages/composables/src/composables/useAddresses/index.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable no-param-reassign, consistent-return */ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, -} from '@vue-storefront/core'; -import { CustomerAddress, CustomerAddressInput } from '@vue-storefront/magento-api'; -import { - transformUserCreateAddressInput, - transformUserUpdateAddressInput, -} from '../../helpers/userAddressManipulator'; -import { useAddressesFactory, UseAddressesParams } from '../../factories/useAddressesFactory'; -import { CustomQueryParams } from '../../types/composables'; - -type SaveAddressInput = { - address: CustomerAddressInput, -} & CustomQueryParams; - -type UpdateAddressInput = { - address: CustomerAddressInput, -} & CustomQueryParams; - -type RemoveAddressInput = { - address: { - id: number; - } -} & CustomQueryParams; - -const factoryParams: UseAddressesParams = { - load: async (context: Context) => { - Logger.debug('[Magento] load user addresses'); - - const { data } = await context.$magento.api.getCustomerAddresses(); - - return data?.customer?.addresses ?? []; - }, - save: async (context: Context, saveParams) => { - Logger.debug('[Magento] save user address:', saveParams.address); - const { data } = await context.$magento.api.createCustomerAddress( - transformUserCreateAddressInput(saveParams), - ); - - Logger.debug('[Result]:', { data }); - - return data?.createCustomerAddress ?? {}; - }, - remove: async (context: Context, params) => { - Logger.debug('[Magento] remove user addresses'); - - const { data } = await context.$magento.api.deleteCustomerAddress( - params.address.id, - ); - - Logger.debug('[Result]:', { data }); - - return !!data.deleteCustomerAddress; - }, - update: async (context: Context, params) => { - Logger.debug('[Magento] update user addresses', params); - - const { data } = await context.$magento.api.updateCustomerAddress( - transformUserUpdateAddressInput(params), - ); - - Logger.debug('[Result]:', { data }); - - return data?.updateCustomerAddress ?? {}; - }, -}; - -export default useAddressesFactory(factoryParams); diff --git a/packages/composables/src/composables/useBilling/index.ts b/packages/composables/src/composables/useBilling/index.ts deleted file mode 100644 index 969206577..000000000 --- a/packages/composables/src/composables/useBilling/index.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, - useBillingFactory, - UseBillingParams, -} from '@vue-storefront/core'; -import { - SetBillingAddressOnCartInput, -} from '@vue-storefront/magento-api'; -import useCart from '../useCart'; -import useShippingProvider from '../useShippingProvider'; - -const factoryParams: UseBillingParams = { - provide() { - return { - useShippingProvider: useShippingProvider(), - cart: useCart(), - }; - }, - - load: async (context: Context, { customQuery }) => { - Logger.debug('[Magento] loadBilling'); - - if (!context.cart.cart?.value?.billing_address) { - await context.cart.load({ customQuery }); - } - - return context?.cart?.cart?.value?.billing_address ?? {}; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - save: async (context: Context, params) => { - Logger.debug('[Magento] setBillingAddress'); - const { id } = context.cart.cart.value; - - const { - apartment, - neighborhood, - extra, - sameAsShipping, - customerAddressId, - ...address - } = params.billingDetails; - - const billingData = customerAddressId - ? ({ - customer_address_id: customerAddressId, - }) - : ({ - address: { - ...address, - street: [address.street, apartment, neighborhood, extra].filter(Boolean), - }, - same_as_shipping: sameAsShipping, - }); - - const setBillingAddressOnCartInput: SetBillingAddressOnCartInput = { - cart_id: id, - billing_address: billingData, - }; - - const { data } = await context.$magento.api.setBillingAddressOnCart( - setBillingAddressOnCartInput, - ); - - Logger.debug('[Result]:', { data }); - - /** - * This is a workaround needed due to Magento GraphQL API - * cleaning the Shipping method after defining the billing address - */ - const shippingMethod = context.useShippingProvider.state.value; - - Logger.debug('[Magento]: Defining the shipping method as:', JSON.stringify(shippingMethod, null, 2)); - - await context.useShippingProvider.save({ - shippingMethod: { - carrier_code: shippingMethod.carrier_code, - method_code: shippingMethod.method_code, - }, - }); - - /** - * End of GraphQL Workaround - */ - return data?.setBillingAddressOnCart?.cart?.billing_address ?? {}; - }, -}; - -export default useBillingFactory(factoryParams); diff --git a/packages/composables/src/composables/useCart/index.ts b/packages/composables/src/composables/useCart/index.ts deleted file mode 100644 index 16c55ffbd..000000000 --- a/packages/composables/src/composables/useCart/index.ts +++ /dev/null @@ -1,400 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - Logger, -} from '@vue-storefront/core'; -import { - AddConfigurableProductsToCartInput, - AddDownloadableProductsToCartInput, - AddVirtualProductsToCartInput, - AddProductsToCartInput, - Cart, - CartItem, - Product, - RemoveItemFromCartInput, - UpdateCartItemsInput, -} from '@vue-storefront/magento-api'; -import { - UseCartFactoryParams, - useCartFactory, -} from '../../factories/useCartFactory'; - -const factoryParams: UseCartFactoryParams = { - load: async (context: Context, params: ComposableFunctionArgs<{ - realCart?: boolean; - }>) => { - const apiState = context.$magento.config.state; - Logger.debug('[Magento Storefront]: Loading Cart'); - - const customerToken = apiState.getCustomerToken(); - const virtual = !params.realCart; - - const createVirtualCart = () => (null as Cart); - - const createRealCart = async (): Promise => { - Logger.debug('[Magento Storefront]: useCart.load.createNewCart'); - - apiState.setCartId(); - - const { data } = await context.$magento.api.createEmptyCart(); - Logger.debug('[Result]:', { data }); - - apiState.setCartId(data.createEmptyCart); - - return data.createEmptyCart; - }; - - const getCartData = async (id: string) => { - Logger.debug('[Magento Storefront]: useCart.load.getCartData ID->', id); - - const { data, errors } = await context.$magento.api.cart(id); - Logger.debug('[Result]:', { data }); - - if (!data?.cart && errors?.length) { - throw errors[0]; - } - - data.cart.items = data.cart.items.filter(Boolean); - return data.cart as unknown as Cart; - }; - - const getCart = async (virtualCart: boolean, cartId?: string) => { - if (!cartId) { - if (virtualCart) { - return createVirtualCart(); - } - - // eslint-disable-next-line no-param-reassign - cartId = await createRealCart(); - apiState.setCartId(cartId); - } - - return getCartData(cartId); - }; - - // Try to load cart for existing customer, clean customer token if not possible - if (customerToken) { - try { - const { data, errors } = await context.$magento.api.customerCart(); - Logger.debug('[Result]:', { data, errors }); - - if (!data?.customerCart && errors?.length) { - throw errors[0]; - } - - apiState.setCartId(data.customerCart.id); - data.customerCart.items = data.customerCart.items.filter(Boolean); - - return data.customerCart as unknown as Cart; - } catch { - apiState.setCustomerToken(); - } - } - - try { - // If it's not existing customer check if cart id is set and try to load it - const cartId = apiState.getCartId(); - return await getCart(virtual, cartId); - } catch { - apiState.setCartId(); - return await getCart(virtual); - } - }, - - addItem: async (context: Context, { - product, - quantity, - currentCart, - customQuery, - }) => { - Logger.debug('[Magento]: Add item to cart', { - product, - quantity, - currentCart, - }); - - const apiState = context.$magento.config.state; - let currentCartId = apiState.getCartId(); - if (!currentCartId) { - await factoryParams.load(context, { - realCart: true, - }); - - currentCartId = apiState.getCartId(); - } - - if (!product) { - return; - } - try { - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - switch (product.__typename) { - case 'SimpleProduct': - const simpleCartInput: AddProductsToCartInput = { - cartId: currentCartId, - cartItems: [ - { - quantity, - sku: product.sku, - }, - ], - }; - - const simpleProduct = await context.$magento.api.addProductsToCart(simpleCartInput); - - Logger.debug('[Result]:', { data: simpleProduct }); - - // eslint-disable-next-line consistent-return - return simpleProduct - .data - .addProductsToCart - .cart as unknown as Cart; - case 'ConfigurableProduct': - const cartItems = [ - { - parent_sku: product.sku, - data: { - quantity, - sku: product.configurable_product_options_selection?.variant?.sku || '', - }, - }, - ]; - - const configurableCartInput: AddConfigurableProductsToCartInput = { - cart_id: currentCartId, - cart_items: cartItems, - }; - - const configurableProduct = await context.$magento.api.addConfigurableProductsToCart(configurableCartInput); - - Logger.debug('[Result]:', { data: configurableProduct }); - - // eslint-disable-next-line consistent-return - return configurableProduct - .data - .addConfigurableProductsToCart - .cart as unknown as Cart; - case 'BundleProduct': - const createEnteredOptions = () => - // @ts-ignore - // eslint-disable-next-line implicit-arrow-linebreak - product.bundle_options.map((bundleOption) => ({ - ...bundleOption, - value: bundleOption.value.toString(), - })); - - const bundleCartInput: AddProductsToCartInput = { - cartId: currentCartId, - cartItems: [ - { - quantity, - sku: product.sku, - entered_options: createEnteredOptions(), - }, - ], - }; - - const bundleProduct = await context.$magento.api.addProductsToCart(bundleCartInput); - - Logger.debug('[Result]:', { data: bundleProduct }); - - // eslint-disable-next-line consistent-return - return bundleProduct - .data - .addProductsToCart - .cart as unknown as Cart; - case 'DownloadableProduct': - const downloadableCartItems = [ - { - data: { - quantity, - sku: product.sku, - }, - downloadable_product_links: product.downloadable_product_links.map((dpl) => ({ link_id: dpl.id })), - }, - ]; - - const downloadableCartInput: AddDownloadableProductsToCartInput = { - cart_id: currentCartId, - cart_items: downloadableCartItems, - }; - - const downloadableProduct = await context.$magento.api.addDownloadableProductsToCart(downloadableCartInput); - - Logger.debug('[Result DownloadableProduct]:', { data: downloadableProduct }); - - // eslint-disable-next-line consistent-return - return downloadableProduct - .data - .addDownloadableProductsToCart - .cart as unknown as Cart; - case 'VirtualProduct': - const virtualCartInput: AddVirtualProductsToCartInput = { - cart_id: currentCartId, - cart_items: [ - { - data: { - quantity, - sku: product.sku, - }, - }, - ], - }; - const virtualProduct = await context.$magento.api.addVirtualProductsToCart(virtualCartInput); - - Logger.debug('[Result VirtualProduct]:', { data: virtualProduct }); - - // eslint-disable-next-line consistent-return - return virtualProduct - .data - .addVirtualProductsToCart - .cart as unknown as Cart; - default: - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - throw new Error(`Product Type ${product.__typename} not supported in add to cart yet`); - } - } catch { - await factoryParams.clear(context, null); - - await factoryParams.addItem(context, { - product, - quantity, - currentCart, - customQuery, - }); - } - }, - removeItem: async (context: Context, { - currentCart, - product, - }) => { - Logger.debug('[Magento]: Remove item from cart', { - product, - currentCart, - }); - - const item = currentCart.items.find((cartItem) => cartItem.uid === product.uid); - - if (!item) { - return; - } - - const removeItemParams: RemoveItemFromCartInput = { - cart_id: currentCart.id, - cart_item_uid: item.uid, - }; - - const { data } = await context.$magento.api.removeItemFromCart(removeItemParams); - - Logger.debug('[Result]:', { data }); - - // eslint-disable-next-line consistent-return - return data - .removeItemFromCart - .cart as unknown as Cart; - }, - - updateItemQty: async (context: Context, { - currentCart, - product, - quantity, - }) => { - Logger.debug('[Magento]: Update product quantity on cart', { - product, - quantity, - currentCart, - }); - - const updateCartParams: UpdateCartItemsInput = { - cart_id: currentCart.id, - cart_items: [ - { - cart_item_uid: product.uid, - quantity, - }, - ], - }; - - try { - const { data } = await context.$magento.api.updateCartItems(updateCartParams); - - Logger.debug('[Result]:', { data }); - - return data - .updateCartItems - .cart as unknown as Cart; - } catch { - // If we can't change quantity, the card could be expired on Magento side, try to reload - return await factoryParams.load(context, { - realCart: true, - }); - } - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - clear: async (context: Context, _params = null) => { - context.$magento.config.state.setCartId(); - - return factoryParams.load(context, {}); - }, - applyCoupon: async (context: Context, { - currentCart, - couponCode, - }) => { - Logger.debug('[Magento]: Apply coupon on cart', { - couponCode, - currentCart, - }); - - const { data } = await context.$magento.api.applyCouponToCart({ - cart_id: currentCart.id, - coupon_code: couponCode, - }); - - Logger.debug('[Result]:', { data }); - - return { - updatedCart: data.applyCouponToCart.cart as unknown as Cart, - updatedCoupon: { code: couponCode }, - }; - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - removeCoupon: async (context: Context, { currentCart }) => { - Logger.debug('[Magento]: Remove coupon from cart', { currentCart }); - - const { data } = await context.$magento.api.removeCouponFromCart({ - cart_id: currentCart.id, - }); - - Logger.debug('[Result]:', { data }); - - return { - updatedCart: data.removeCouponFromCart.cart as unknown as Cart, - updatedCoupon: { code: '' }, - }; - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - isInCart: ( - context: Context, - { - currentCart, - product, - }, - ) => !!currentCart?.items.find((cartItem) => cartItem?.product?.uid === product.uid), - loadTotalQty: async (context: Context) => { - const apiState = context.$magento.config.state; - if (apiState.getCartId()) { - const { data } : any = await context.$magento.api.cartTotalQty(apiState.getCartId()); - - return data?.cart?.total_quantity ?? 0; - } - - return 0; - }, -}; - -export default useCartFactory(factoryParams); diff --git a/packages/composables/src/composables/useCategory/index.ts b/packages/composables/src/composables/useCategory/index.ts deleted file mode 100644 index 7df449a7b..000000000 --- a/packages/composables/src/composables/useCategory/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - useCategoryFactory, - Context, - UseCategoryFactoryParams, Logger, -} from '@vue-storefront/core'; -import { - Category, CategoryListQueryVariables, -} from '@vue-storefront/magento-api'; - -const factoryParams: UseCategoryFactoryParams = { - categorySearch: async (context: Context, params) => { - Logger.debug('[Magento]: List available categories', { params }); - - const { data } = await context.$magento.api.categoryList(params); - - Logger.debug('[Result]:', { data }); - - return data.categories.items; - }, -}; - -export default useCategoryFactory(factoryParams); diff --git a/packages/composables/src/composables/useCategorySearch/index.ts b/packages/composables/src/composables/useCategorySearch/index.ts deleted file mode 100644 index 8c24ad440..000000000 --- a/packages/composables/src/composables/useCategorySearch/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, -} from '@vue-storefront/core'; -import { Category, CategorySearchQueryVariables } from '@vue-storefront/magento-api'; -import { UseCategorySearchFactory, useCategorySearchFactory } from '../../factories/useCategorySearchFactory'; -import { UseCategorySearch } from '../../types/composables'; - -const factoryParams: UseCategorySearchFactory = { - search: async (context: Context, params): Promise => { - Logger.debug('[Magento]: Search for category using', { params }); - const { filters } = params; - const { data } = await context.$magento.api.categorySearch({ filters }); - - Logger.debug('[Result]:', { data }); - - return data.categoryList; - }, -}; - -// eslint-disable-next-line max-len -const useCategorySearch: (cacheId?: string) => UseCategorySearch = useCategorySearchFactory(factoryParams); - -export default useCategorySearch; diff --git a/packages/composables/src/composables/useConfig/index.ts b/packages/composables/src/composables/useConfig/index.ts deleted file mode 100644 index 6772402be..000000000 --- a/packages/composables/src/composables/useConfig/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context, Logger } from '@vue-storefront/core'; -import { StoreConfig } from '@vue-storefront/magento-api'; -import { useConfigFactory, UseConfigFactoryParams } from '../../factories/useConfigFactory'; -import { UseConfig } from '../../types/composables'; - -const factoryParams: UseConfigFactoryParams = { - loadConfig: async (context: Context) => { - const { data } = await context.$magento.api.storeConfig(); - - Logger.debug('[Magento] useConfig:loadConfig data', { data }); - - return data.storeConfig || {}; - }, -}; - -const useConfig: (cacheId?: string) => UseConfig = useConfigFactory(factoryParams); - -export default useConfig; diff --git a/packages/composables/src/composables/useContent/index.ts b/packages/composables/src/composables/useContent/index.ts deleted file mode 100644 index e1fe69146..000000000 --- a/packages/composables/src/composables/useContent/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context, Logger } from '@vue-storefront/core'; -import { Page, CmsBlock } from '@vue-storefront/magento-api'; -import { useContentFactory, UseContentFactoryParams } from '../../factories/useContentFactory'; - -const factoryParams: UseContentFactoryParams = { - loadContent: async (context: Context, params) => { - Logger.debug('[Magento]: Load CMS Page content', { params }); - - const { data } = await context.$magento.api.cmsPage(params.identifier); - - Logger.debug('[Result]:', { data }); - - return data.cmsPage; - }, - loadBlocks: async (context: Context, params) => { - Logger.debug('[Magento]: Load CMS Blocks content', { params }); - - const { data } = await context.$magento.api.cmsBlocks(params.identifiers); - - Logger.debug('[Result]:', { data }); - - return data.cmsBlocks.items; - }, -}; - -export default useContentFactory(factoryParams); diff --git a/packages/composables/src/composables/useCountrySearch/index.ts b/packages/composables/src/composables/useCountrySearch/index.ts deleted file mode 100644 index deca96596..000000000 --- a/packages/composables/src/composables/useCountrySearch/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, -} from '@vue-storefront/core'; -import { Countries, Country } from '@vue-storefront/magento-api'; -import { UseCountryFactoryParams, useCountrySearchFactory } from '../../factories/useCountrySearchFactory'; -import { UseCountrySearch } from '../../types/composables'; - -const factoryParams: UseCountryFactoryParams = { - load: async (context: Context, _params): Promise => { - Logger.debug('[Magento]: Load available countries on store'); - - const { data } = await context.$magento.api.countries(); - - Logger.debug('[Result]:', { data }); - - return data.countries; - }, - search: async (context: Context, params): Promise => { - Logger.debug('[Magento]: Search country information based on', { params }); - - const { data } = await context.$magento.api.country(params.id); - - Logger.debug('[Result]:', { data }); - - return data.country; - }, -}; - -const useCountrySearch: (cacheId?: string) => UseCountrySearch = useCountrySearchFactory(factoryParams); - -export default useCountrySearch; diff --git a/packages/composables/src/composables/useCurrency/index.ts b/packages/composables/src/composables/useCurrency/index.ts deleted file mode 100644 index e736b0e7f..000000000 --- a/packages/composables/src/composables/useCurrency/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context } from '@vue-storefront/core'; -import { Currency } from '@vue-storefront/magento-api'; -import { useCurrencyFactory, UseCurrencyFactoryParams } from '../../factories/useCurrencyFactory'; -import { UseCurrency } from '../../types/composables'; - -const factoryParams: UseCurrencyFactoryParams = { - load: async (context: Context, _params): Promise => { - const { data } = await context.$magento.api.currency(); - - return data.currency || {}; - }, - - change: (context: Context, params) => { - context.$magento.config.state.setCurrency(params.id); - }, -}; - -const useCurrency: () => UseCurrency = useCurrencyFactory(factoryParams); - -export default useCurrency; diff --git a/packages/composables/src/composables/useCustomMutation/index.ts b/packages/composables/src/composables/useCustomMutation/index.ts deleted file mode 100644 index 6e8d24632..000000000 --- a/packages/composables/src/composables/useCustomMutation/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context, Logger } from '@vue-storefront/core'; -import { FetchPolicy } from '../../types'; -import { useCustomMutationFactory } from '../../factories/useMutationQueryFactory'; - -export default useCustomMutationFactory({ - mutation: async (context: Context, { - mutation, - variables, - fetchPolicy, - }: { - mutation: string, - variables: any, - fetchPolicy?: Extract, - // eslint-disable-next-line consistent-return - }) => { - Logger.debug('[Magento] Custom API Mutation', { variables }); - - const result = await context.$magento.api.customMutation({ - mutation, - mutationVariables: variables, - fetchPolicy, - }); - - Logger.debug('[Custom Mutation -> Result]:', result); - - return result; - }, -}); diff --git a/packages/composables/src/composables/useCustomQuery/index.ts b/packages/composables/src/composables/useCustomQuery/index.ts deleted file mode 100644 index fd14f404f..000000000 --- a/packages/composables/src/composables/useCustomQuery/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @deprecated Will be removed in 1.1.0 release - * @use @vue-storefront/magento-theme/composables/useApi instead - */ -import { Context, Logger } from '@vue-storefront/core'; -import { - useCustomQueryFactory, -} from '../../factories/useCustomQueryFactory'; -import { FetchPolicy } from '../../types'; - -/** - * @deprecated Will be removed in 1.1.0 release - * @use @vue-storefront/magento-theme/composables/useApi instead - */ -export default useCustomQueryFactory({ - query: async (context: Context, { - query, - variables, - fetchPolicy, - }: { - query: string, - variables: any, - fetchPolicy?: FetchPolicy, - // eslint-disable-next-line consistent-return - }) => { - Logger.debug('[Magento] Custom API Query', { variables }); - - const result = await context.$magento.api.customQuery({ - query, - queryVariables: variables, - fetchPolicy, - }); - - Logger.debug('[Custom Query -> Result]:', result); - - return result; - }, -}); diff --git a/packages/composables/src/composables/useExternalCheckout/index.ts b/packages/composables/src/composables/useExternalCheckout/index.ts deleted file mode 100644 index e9ffce80a..000000000 --- a/packages/composables/src/composables/useExternalCheckout/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context, Logger } from '@vue-storefront/core'; -import { useExternalCheckoutFactory, UseExternalCheckoutFactoryParams } from '../../factories/useExternalCheckoutFactory'; -import useCart from '../useCart'; -// import useConfig from '../useConfig'; - -const factoryParams: UseExternalCheckoutFactoryParams = { - provide() { - return { - cart: useCart(), - }; - }, - // eslint-disable-next-line @typescript-eslint/require-await - initializeCheckout: async (context: Context, params) => { - Logger.debug('[Magento]: Initialize external checkout', { params }); - - const { externalCheckout, state } = context.$magento.config; - - const userToken = state.getCustomerToken(); - const cartToken = state.getCartId(); - - Logger.debug({ userToken, cartToken }); - - if (externalCheckout.enable) { - if (userToken && cartToken) { - /* if (Object.keys(externalCheckout.stores).length) { - - } */ - window.location.replace(`${externalCheckout.cmsUrl}${externalCheckout.syncUrlPath}/token/${userToken}/cart/${cartToken}`); - return ''; - } - - window.location.replace(`${externalCheckout.cmsUrl}${externalCheckout.syncUrlPath}/token//cart/${cartToken}`); - return ''; - } - - return params.baseUrl; - }, -}; - -export default useExternalCheckoutFactory(factoryParams); diff --git a/packages/composables/src/composables/useFacet/_utils.ts b/packages/composables/src/composables/useFacet/_utils.ts deleted file mode 100644 index 9d8297f2a..000000000 --- a/packages/composables/src/composables/useFacet/_utils.ts +++ /dev/null @@ -1,78 +0,0 @@ -// @depracated - moved to theme - -import { SearchData } from '../../types'; - -const buildBreadcrumbsList = (rootCat, bc) => { - const newBc = [...bc, { - text: rootCat.name, - link: rootCat.slug, - }]; - return rootCat.parent ? buildBreadcrumbsList(rootCat.parent, newBc) : newBc; -}; - -export const buildBreadcrumbs = (rootCat) => buildBreadcrumbsList(rootCat, []) - .reverse() - .reduce( - (prev, curr, index) => ([ - ...prev, - { - ...curr, - link: `${prev[index - 1]?.link || ''}/${curr.link}`, - }]), - [], - ); - -const filterFacets = (criteria) => (f) => (criteria ? criteria.includes(f.attribute_code) : true); - -const getFacetTypeByCode = (code) => { - if (code === 'type_of_stones') { - return 'radio'; - } - return 'checkbox'; -}; - -const createFacetsFromOptions = (facets, filters, facet) => { - const options = facet.options || []; - const selectedList = filters && filters[facet.attribute_code] ? filters[facet.attribute_code] : []; - return options - .map(({ - label, - value, - count, - }) => ({ - type: getFacetTypeByCode(facet.attribute_code), - id: label, - attrName: label, - value, - selected: selectedList.includes(value), - count, - })); -}; - -export const reduceForFacets = (facets, filters) => (prev, curr) => ([ - ...prev, - ...createFacetsFromOptions(facets, filters, curr), -]); - -export const reduceForGroupedFacets = (facets, filters) => (prev, curr) => ([ - ...prev, - { - id: curr.attribute_code, - label: curr.label, - options: createFacetsFromOptions(facets, filters, curr), - count: null, - }, -]); - -export const buildFacets = (searchData: SearchData, reduceFn, criteria?: string[]) => { - if (!searchData.data) { - return []; - } - - const { - data: { availableFilters: facets }, - input: { filters }, - } = searchData; - - return facets?.filter(filterFacets(criteria)).reduce(reduceFn(facets, filters), []); -}; diff --git a/packages/composables/src/composables/useFacet/index.ts b/packages/composables/src/composables/useFacet/index.ts deleted file mode 100644 index 3d4a5ff30..000000000 --- a/packages/composables/src/composables/useFacet/index.ts +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - FacetSearchResult, Logger, - ProductsSearchParams, - useFacetFactory, -} from '@vue-storefront/core'; -import { GetProductSearchParams } from '@vue-storefront/magento-api/src/types/API'; - -const availableSortingOptions = [ - { - label: 'Sort: Default', - value: '', - }, - { - label: 'Sort: Name A-Z', - value: 'name_ASC', - }, - { - label: 'Sort: Name Z-A', - value: 'name_DESC', - }, - { - label: 'Sort: Price from low to high', - value: 'price_ASC', - }, { - label: 'Sort: Price from high to low', - value: 'price_DESC', - }, -]; - -const constructFilterObject = (inputFilters: Object) => { - const filter = {}; - - Object.keys(inputFilters).forEach((key) => { - if (key === 'price') { - const price = { from: 0, to: 0 }; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const flatPrices = inputFilters[key].flatMap((inputFilter) => inputFilter.split('_').map((str) => Number.parseFloat(str))).sort((a, b) => a - b); - - [price.from] = flatPrices; - price.to = flatPrices[flatPrices.length - 1]; - - filter[key] = price; - } else if (typeof inputFilters[key] === 'string') { - filter[key] = { in: [inputFilters[key]] }; - } else { - filter[key] = { in: inputFilters[key] }; - } - }); - - return filter; -}; - -const constructSortObject = (sortData: string) => { - const baseData = sortData.split(/_/gi); - - return baseData.length > 0 ? Object.fromEntries([baseData]) : {}; -}; - -/** - * @deprecated since version 1.0.0 - */ -const factoryParams = { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - search: async (context: Context, params: ComposableFunctionArgs>) => { - Logger.debug('[Magento] Load product facets', { params }); - - const itemsPerPage = (params.input.itemsPerPage) ? params.input.itemsPerPage : 20; - const inputFilters = (params.input.filters) ? params.input.filters : {}; - const categoryId = (params.input.categoryId) ? { - category_uid: { - ...(Array.isArray(params.input.categoryId) - ? { in: params.input.categoryId } - : { eq: params.input.categoryId }), - }, - } : {}; - - const productParams: ProductsSearchParams = { - filter: { - ...categoryId, - ...constructFilterObject({ - ...inputFilters, - }), - }, - perPage: itemsPerPage, - offset: (params.input.page - 1) * itemsPerPage, - page: params.input.page, - search: (params.input.term) ? params.input.term : '', - sort: constructSortObject(params.input.sort || ''), - }; - - const productSearchParams: GetProductSearchParams = { - pageSize: productParams.perPage, - search: productParams.search, - filter: productParams.filter, - sort: productParams.sort, - currentPage: productParams.page, - }; - - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const { data } = await context.$magento.api.products(productSearchParams, params?.input.customQuery || { products: 'products' }); - - Logger.debug('[Result]:', { data }); - - return { - items: data?.products?.items || [], - total: data?.products?.total_count, - availableFilters: data?.products?.aggregations, - category: { id: params.input.categoryId }, - availableSortingOptions, - perPageOptions: [10, 20, 50], - itemsPerPage, - }; - }, -}; - -export default useFacetFactory(factoryParams); diff --git a/packages/composables/src/composables/useForgotPassword/index.ts b/packages/composables/src/composables/useForgotPassword/index.ts deleted file mode 100644 index 24133c018..000000000 --- a/packages/composables/src/composables/useForgotPassword/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, - useForgotPasswordFactory, -} from '@vue-storefront/core'; -import { UseForgotPasswordFactoryParams } from '../../factories/useForgotPasswordFactory'; - -const factoryParams: UseForgotPasswordFactoryParams = { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - resetPassword: async (context: Context, params) => { - Logger.debug('[Magento]: Reset user password', { params }); - - const { data } = await context.$magento.api.requestPasswordResetEmail({ email: params.email, recaptchaToken: params.recaptchaToken }); - - Logger.debug('[Result]:', { data }); - - return data; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - setNewPassword: async (context: Context, params) => { - Logger.debug('[Magento]: Define new user password', { params }); - - const { data } = await context.$magento.api.resetPassword({ - email: params.email, - newPassword: params.newPassword, - resetPasswordToken: params.tokenValue, - recaptchaToken: params.recaptchaToken, - }); - - Logger.debug('[Result]:', { data }); - - return data; - }, -}; - -export const useForgotPassword = useForgotPasswordFactory(factoryParams); -export default useForgotPassword; diff --git a/packages/composables/src/composables/useGetShippingMethods/index.ts b/packages/composables/src/composables/useGetShippingMethods/index.ts deleted file mode 100644 index 288df08bb..000000000 --- a/packages/composables/src/composables/useGetShippingMethods/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, -} from '@vue-storefront/core'; -import { ShippingMethod } from '@vue-storefront/magento-api'; -import { UseGetShippingMethods } from '../../types/composables'; -import { UseGetShippingMethodsFactory, useGetShippingMethodsFactory } from '../../factories/useGetShippingMethodsFactory'; - -const factoryParams: UseGetShippingMethodsFactory = { - load: async (context: Context, params): Promise => { - Logger.debug('[Magento]: Load shipping methods', { params }); - const isGuest = params.cartId; - - if (isGuest) { - const { data } = await context.$magento.api.getAvailableShippingMethods({ cartId: params.cartId }); - - Logger.debug('[Result]:', { data }); - - const hasAddresses = data.cart.shipping_addresses.length > 0; - - return hasAddresses ? data.cart.shipping_addresses[0].available_shipping_methods : []; - } - - const { data } = await context.$magento.api.getAvailableCustomerShippingMethods(); - - Logger.debug('[Result]:', { data }); - - const hasAddresses = data.customerCart.shipping_addresses.length > 0; - - return hasAddresses ? data?.customerCart?.shipping_addresses[0]?.available_shipping_methods : []; - }, -}; - -const useGetShippingMethods: -(cacheId?: string) => UseGetShippingMethods = useGetShippingMethodsFactory(factoryParams); - -export default useGetShippingMethods; diff --git a/packages/composables/src/composables/useGuestUser/index.ts b/packages/composables/src/composables/useGuestUser/index.ts deleted file mode 100644 index 8c4054926..000000000 --- a/packages/composables/src/composables/useGuestUser/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { SetGuestEmailOnCartInput } from '@vue-storefront/magento-api'; -import { Logger } from '@vue-storefront/core'; -import { useGuestUserFactory, UseGuestUserFactoryParams } from '../../factories/useGuestUserFactory'; -import useCart from '../useCart'; - -const factoryParams: UseGuestUserFactoryParams = { - provide() { - return { - cart: useCart(), - }; - }, - attachToCart: async (context, params) => { - Logger.debug('[Magento]: Attach guest cart to user'); - - const emailOnCartInput: SetGuestEmailOnCartInput = { - email: params.email, - cart_id: context.cart.cart.value.id, - }; - - await context.$magento.api.setGuestEmailOnCart({ - ...emailOnCartInput, - }); - }, -}; - -export default useGuestUserFactory(factoryParams); diff --git a/packages/composables/src/composables/useMakeOrder/index.ts b/packages/composables/src/composables/useMakeOrder/index.ts deleted file mode 100644 index 08089256b..000000000 --- a/packages/composables/src/composables/useMakeOrder/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, UseMakeOrder, useMakeOrderFactory, UseMakeOrderFactoryParams, -} from '@vue-storefront/core'; -import { Order } from '@vue-storefront/magento-api'; -import useCart from '../useCart'; - -const factoryParams: UseMakeOrderFactoryParams = { - provide() { - return { - cart: useCart(), - }; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - make: async (context: Context, params): Promise => { - Logger.debug('[Magento] Make Order', { params }); - const { id } = context.cart.cart.value; - const { data } = await context.$magento.api.placeOrder({ cart_id: id }); - - Logger.debug('[Result]:', { data }); - - return data.placeOrder.order; - }, -}; - -const useMakeOrder: () => UseMakeOrder = useMakeOrderFactory(factoryParams); - -export default useMakeOrder; diff --git a/packages/composables/src/composables/useNewsletter/index.ts b/packages/composables/src/composables/useNewsletter/index.ts deleted file mode 100644 index 10edf4d0b..000000000 --- a/packages/composables/src/composables/useNewsletter/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, Logger, -} from '@vue-storefront/core'; -import useUser from '../useUser'; -import { useNewsletterFactory, UseNewsletterFactoryParams } from '../../factories/useNewsletterFactory'; - -const factoryParams: UseNewsletterFactoryParams = { - provide() { - return { - user: useUser(), - }; - }, - updateSubscription: async (context: Context, params) => { - Logger.debug('[Magento]: Update user newsletter subscription', { params }); - - const { data } = await context.$magento.api.subscribeEmailToNewsletter( - { - email: params.email, - }, - ); - - Logger.debug('[Result]:', { data }); - - return data.subscribeEmailToNewsletter.status; - }, -}; - -export default useNewsletterFactory(factoryParams); diff --git a/packages/composables/src/composables/usePaymentProvider/index.ts b/packages/composables/src/composables/usePaymentProvider/index.ts deleted file mode 100644 index 281712780..000000000 --- a/packages/composables/src/composables/usePaymentProvider/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, -} from '@vue-storefront/core'; -import { - PaymentMethodInput, - SetPaymentMethodOnCartInputs, -} from '@vue-storefront/magento-api'; -import useCart from '../useCart'; -import { usePaymentProviderFactory, UsePaymentProviderParams } from '../../factories/usePaymentProviderFactory'; - -const factoryParams: UsePaymentProviderParams = { - provide() { - return { - cart: useCart(), - }; - }, - load: async (context: Context, { customQuery }) => { - Logger.debug('[Magento] loadPaymentProvider', { customQuery }); - const cartId = context.cart.cart.value.id; - const { data } = await context - .$magento - .api - .getAvailablePaymentMethods({ cartId }); - - Logger.debug('[Result]:', { data }); - - return data - .cart - .available_payment_methods; - }, - - save: async (context: Context, params) => { - Logger.debug('[Magento] savePaymentProvider', { params }); - - const paymentMethodParams: SetPaymentMethodOnCartInputs = { - cart_id: context.cart.cart.value.id, - payment_method: { - ...params.paymentMethod, - }, - }; - - const { data } = await context - .$magento - .api - .setPaymentMethodOnCart(paymentMethodParams); - - Logger.debug('[Result]:', { data }); - - return data - .setPaymentMethodOnCart - .cart - .available_payment_methods; - }, -}; - -export default usePaymentProviderFactory(factoryParams); diff --git a/packages/composables/src/composables/useProduct/index.ts b/packages/composables/src/composables/useProduct/index.ts deleted file mode 100644 index c1b20659a..000000000 --- a/packages/composables/src/composables/useProduct/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - Logger, - ProductsSearchParams, - UseProduct, - useProductFactory, - UseProductFactoryParams, -} from '@vue-storefront/core'; -import { ProductsListQuery, GetProductSearchParams, ProductsQueryType } from '@vue-storefront/magento-api'; -import { Scalars } from '@vue-storefront/magento-api/lib/types/GraphQL'; - -const factoryParams: UseProductFactoryParams = { - productsSearch: async (context: Context, params: ComposableFunctionArgs) => { - Logger.debug('[Magento]: Load product based on ', { params }); - - const { - queryType, - customQuery, - ...searchParams - } = { - ...params, - }; - - switch (queryType) { - case ProductsQueryType.Detail: - const productDetailsResults = await context - .$magento - .api - .productDetail({ - ...searchParams, - } as GetProductSearchParams); - - Logger.debug('[Result]:', { data: productDetailsResults }); - - return productDetailsResults.data?.products; - - case ProductsQueryType.List: - default: - const productListResults = await context - .$magento - .api - .products(searchParams as GetProductSearchParams); - - Logger.debug('[Result]:', { data: productListResults }); - - return productListResults.data?.products; - } - }, -}; - -const useProduct: -(cacheId?: string) => UseProduct = useProductFactory(factoryParams); - -export default useProduct; diff --git a/packages/composables/src/composables/useRelatedProducts/index.ts b/packages/composables/src/composables/useRelatedProducts/index.ts deleted file mode 100644 index 89e02efb1..000000000 --- a/packages/composables/src/composables/useRelatedProducts/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - Logger, - ProductsSearchParams, -} from '@vue-storefront/core'; -import { - GetProductSearchParams, - RelatedProductQuery, -} from '@vue-storefront/magento-api'; -import { UseRelatedProducts } from '../../types/composables'; -import { - useRelatedProductsFactory, - UseRelatedProductsFactoryParams, -} from '../../factories/useRelatedProductsFactory'; - -const factoryParams: UseRelatedProductsFactoryParams = { - productsSearch: async ( - context: Context, - params: ComposableFunctionArgs, - ) => { - Logger.debug('[Magento] Load related products based on ', { params }); - - const { - customQuery, - ...searchParams - } = params; - - const { data } = await context - .$magento - .api - .relatedProduct(searchParams as GetProductSearchParams); - - Logger.debug('[Result]:', { data }); - - return data.products?.items[0]?.related_products; - }, -}; - -const useRelatedProducts: -(cacheId?: string) => UseRelatedProducts = useRelatedProductsFactory(factoryParams); - -export default useRelatedProducts; diff --git a/packages/composables/src/composables/useReview/index.ts b/packages/composables/src/composables/useReview/index.ts deleted file mode 100644 index a768922ca..000000000 --- a/packages/composables/src/composables/useReview/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - Logger, -} from '@vue-storefront/core'; -import { - GetProductSearchParams, - ProductReviewRatingMetadata, - CreateProductReviewInput, - CustomerProductReviewParams, -} from '@vue-storefront/magento-api'; -import { useReviewFactory, UseReviewFactoryParams } from '../../factories/useReviewFactory'; - -const factoryParams: UseReviewFactoryParams, -ComposableFunctionArgs, -CreateProductReviewInput, -ProductReviewRatingMetadata> = { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - searchReviews: async (context: Context, params?: ComposableFunctionArgs) => { - Logger.debug('[Magento] search review params input:', JSON.stringify(params, null, 2)); - const { - customQuery, - ...input - } = params; - - const { data } = await context.$magento.api.productReview(input as GetProductSearchParams); - - Logger.debug('[Result]:', { data }); - - return data?.products?.items ?? []; - }, - addReview: async (context: Context, params: ComposableFunctionArgs) => { - Logger.debug('[Magento] add review params input:', JSON.stringify(params, null, 2)); - const { - customQuery, - ...input - } = params; - - const { data } = await context.$magento.api.createProductReview(input); - - Logger.debug('[Result]:', { data }); - - return data?.createProductReview?.review ?? {}; - }, - loadReviewMetadata: async (context: Context, _params) => { - Logger.debug('[Magento] load review metadata'); - - const { data } = await context.$magento.api.productReviewRatingsMetadata(); - - Logger.debug('[Result]:', { data }); - - return data?.productReviewRatingsMetadata?.items ?? []; - }, - loadCustomerReviews: async ( - context: Context, - params?: ComposableFunctionArgs, - ) => { - Logger.debug('[Magento] load customer review based on:', { params }); - const { data } = await context.$magento.api.customerProductReview(params); - - Logger.debug('[Result]:', { data }); - - return data?.customer ?? {}; - }, -}; - -export default useReviewFactory, -ComposableFunctionArgs, -CreateProductReviewInput, -ProductReviewRatingMetadata>(factoryParams); diff --git a/packages/composables/src/composables/useShipping/index.ts b/packages/composables/src/composables/useShipping/index.ts deleted file mode 100644 index 33bb092cc..000000000 --- a/packages/composables/src/composables/useShipping/index.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ - -import { - Context, - Logger, - useShippingFactory, - UseShippingParams, -} from '@vue-storefront/core'; -import { - SetShippingAddressesOnCartInput, -} from '@vue-storefront/magento-api'; -import useCart from '../useCart'; -import useGetShippingMethods from '../useGetShippingMethods'; - -const factoryParams: UseShippingParams = { - provide() { - return { - useGetShippingMethods: useGetShippingMethods(), - cart: useCart(), - }; - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - load: async (context: Context, { customQuery }) => { - Logger.debug('[Magento] loadShipping', { customQuery }); - - if (!context.cart.cart?.value?.shipping_addresses) { - await context.cart.load({ customQuery }); - } - - return context.cart.cart.value.shipping_addresses[0]; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - save: async (context: Context, params) => { - Logger.debug('[Magento] save user shipping address', { params }); - - const { id } = context.cart.cart.value; - - const { - apartment, - neighborhood, - extra, - customerAddressId, - ...address - } = params.shippingDetails; - - const shippingData = customerAddressId - ? ({ - customer_address_id: customerAddressId, - }) - : ({ - address: { - ...address, - street: [address.street, apartment, neighborhood, extra].filter(Boolean), - }, - }); - - const shippingAddressInput: SetShippingAddressesOnCartInput = { - cart_id: id, - shipping_addresses: [ - { - ...shippingData, - }, - ], - }; - - const { data } = await context - .$magento - .api - .setShippingAddressesOnCart(shippingAddressInput); - - Logger.debug('[Result]:', { data }); - - context.useGetShippingMethods.setState(data - .setShippingAddressesOnCart - .cart - .shipping_addresses[0] - .available_shipping_methods); - - return data - .setShippingAddressesOnCart - .cart - .shipping_addresses[0]; - }, -}; - -export default useShippingFactory(factoryParams); diff --git a/packages/composables/src/composables/useShippingProvider/index.ts b/packages/composables/src/composables/useShippingProvider/index.ts deleted file mode 100644 index f961c5b6a..000000000 --- a/packages/composables/src/composables/useShippingProvider/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ - -import { - Context, - Logger, - useShippingProviderFactory, - UseShippingProviderParams, -} from '@vue-storefront/core'; -import { - SetShippingMethodsOnCartInput, ShippingMethodInput, -} from '@vue-storefront/magento-api'; -import useCart from '../useCart'; - -const factoryParams: UseShippingProviderParams = { - provide() { - return { - cart: useCart(), - }; - }, - load: async (context: Context, { customQuery }) => { - Logger.debug('[Magento] loadShippingProvider', { customQuery }); - - if (!context.cart.cart?.value?.shipping_addresses[0]?.selected_shipping_method) { - await context.cart.load({ customQuery }); - } - - return context - .cart - .cart - .value?.shipping_addresses[0]?.selected_shipping_method; - }, - - save: async (context: Context, params) => { - Logger.debug('[Magento] saveShippingProvider', { params }); - - const shippingMethodParams: SetShippingMethodsOnCartInput = { - cart_id: context.cart.cart.value.id, - shipping_methods: [{ - ...params.shippingMethod, - }], - }; - - const { data } = await context.$magento.api.setShippingMethodsOnCart(shippingMethodParams); - - Logger.debug('[Result]:', { data }); - - const { cart } = data - .setShippingMethodsOnCart; - - context.cart.setCart(cart); - - return cart - .shipping_addresses[0] - .selected_shipping_method; - }, -}; - -export default useShippingProviderFactory(factoryParams); diff --git a/packages/composables/src/composables/useStore/index.ts b/packages/composables/src/composables/useStore/index.ts deleted file mode 100644 index cf2e38511..000000000 --- a/packages/composables/src/composables/useStore/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context } from '@vue-storefront/core'; -import { AvailableStores, StoreConfig } from '@vue-storefront/magento-api'; -import { useStoreFactory, UseStoreFactoryParams } from '../../factories/useStoreFactory'; -import { UseStore } from '../../types/composables'; -import useCart from '../useCart'; -import StoreConfigGetters from '../../getters/storeConfigGetters'; - -const factoryParams: UseStoreFactoryParams = { - provide() { - return { - cart: useCart(), - }; - }, - load: async (context: Context): Promise => { - const { data } = await context.$magento.api.availableStores(); - - return data.availableStores || []; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - change: (context: Context, store) => { - context.$magento.config.state.setStore(StoreConfigGetters.getCode(store)); - context.$magento.config.state.setCurrency(StoreConfigGetters.getCurrency(store)); - context.$magento.config.state.setLocale(StoreConfigGetters.getCode(store)); - }, -}; - -const useStore: () => UseStore = useStoreFactory(factoryParams); - -export default useStore; diff --git a/packages/composables/src/composables/useUpsellProducts/index.ts b/packages/composables/src/composables/useUpsellProducts/index.ts deleted file mode 100644 index 81d5a812d..000000000 --- a/packages/composables/src/composables/useUpsellProducts/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - Context, - Logger, - ProductsSearchParams, -} from '@vue-storefront/core'; -import { - GetProductSearchParams, - UpsellProductsQuery, -} from '@vue-storefront/magento-api'; -import { - useUpsellProductsFactory, - UseUpsellProductsFactoryParams, -} from '../../factories/useUpsellProductsFactory'; -import { UseUpsellProducts } from '../../types/composables'; - -const factoryParams: UseUpsellProductsFactoryParams = { - productsSearch: async ( - context: Context, - params: ComposableFunctionArgs, - ) => { - Logger.debug('[Magento] Find upsell products based on ', { params }); - - const { - customQuery, - ...searchParams - } = { - ...params, - }; - - const { data } = await context - .$magento - .api - .upsellProduct(searchParams as GetProductSearchParams); - - Logger.debug('[Result]:', { data }); - - return data.products?.items[0]?.upsell_products; - }, -}; - -const useUpsellProducts: -(cacheId?: string) => UseUpsellProducts = useUpsellProductsFactory(factoryParams); - -export default useUpsellProducts; diff --git a/packages/composables/src/composables/useUrlResolver/index.ts b/packages/composables/src/composables/useUrlResolver/index.ts deleted file mode 100644 index eb1f7d658..000000000 --- a/packages/composables/src/composables/useUrlResolver/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Context, Logger } from '@vue-storefront/core'; -import { Route } from '@vue-storefront/magento-api'; -import { useUrlResolverFactory, UseUrlResolverFactoryParams } from '../../factories/useUrlResolverFactory'; -import { UseUrlResolver } from '../../types/composables'; - -const factoryParams: UseUrlResolverFactoryParams = { - search: async (context: Context, params) => { - Logger.debug('[Magento] Find information based on URL', { params }); - const clearUrl = params.url.replace(/[a-z]+\/[cp|]\//gi, ''); - - const { data } = await context.$magento.api.urlResolver(clearUrl); - - Logger.debug('[Result]:', { data }); - - return data.urlResolver; - }, -}; -const useUrlResolver: (cacheId?: string) => UseUrlResolver = useUrlResolverFactory(factoryParams); - -export default useUrlResolver; diff --git a/packages/composables/src/composables/useUser/index.ts b/packages/composables/src/composables/useUser/index.ts deleted file mode 100644 index 1542fbfb6..000000000 --- a/packages/composables/src/composables/useUser/index.ts +++ /dev/null @@ -1,199 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - CustomQuery, - Logger, - useUserFactory, - UseUserFactoryParams as UserUserFactoryParamsBase, -} from '@vue-storefront/core'; -import { CustomerCreateInput, UpdateCustomerEmailMutationVariables } from '@vue-storefront/magento-api'; -import useCart from '../useCart'; -import { generateUserData } from '../../helpers/userDataGenerator'; - -interface UseUserFactoryParams - extends UserUserFactoryParamsBase { - logIn: (context: Context, params: { - username: string; - password: string; - recaptchaToken?: string; - customQuery?: CustomQuery; - }) => Promise; - - register: (context: Context, params: REGISTER_USER_PARAMS & { - customQuery?: CustomQuery; - recaptchaInstance?: any; - }) => Promise; -} - -const factoryParams: UseUserFactoryParams< -any, -UpdateCustomerEmailMutationVariables, -CustomerCreateInput -> = { - provide() { - return { - cart: useCart(), - }; - }, - load: async (context: Context) => { - Logger.debug('[Magento] Load user information'); - const apiState = context.$magento.config.state; - - if (!apiState.getCustomerToken()) { - return null; - } - try { - const { data } = await context.$magento.api.customer(); - - Logger.debug('[Result]:', { data }); - - return data?.customer ?? {}; - } catch { - // eslint-disable-next-line no-void - // @ts-ignore - await factoryParams.logOut(context); - } - - return null; - }, - logOut: async (context: Context, params) => { - const apiState = context.$magento.config.state; - - await context.$magento.api.revokeCustomerToken(params); - - apiState.setCustomerToken(); - apiState.setCartId(); - }, - updateUser: async (context: Context, params) => { - Logger.debug('[Magento] Update user information', { params }); - - const { email: oldEmail } = params.currentUser; - const { email, password, ...updateData } = params.updatedUserData; - - const userData = generateUserData(updateData); - - if (email && email !== oldEmail) { - await context.$magento.api.updateCustomerEmail({ - email, - password, - }); - } - - const { data, errors } = await context.$magento.api.updateCustomer(userData); - Logger.debug('[Result]:', { data }); - - if (errors) { - throw new Error(errors.map((e) => e.message).join(',')); - } - - // return data.updateCustomerV2.customer; - return data?.updateCustomerV2?.customer || {}; - }, - register: async (context: Context, params) => { - const { - email, - password, - recaptchaToken, - ...baseData - } = generateUserData(params); - - const { data, errors } = await context.$magento.api.createCustomer( - { - email, - password, - recaptchaToken, - ...baseData, - }, - ); - - Logger.debug('[Result]:', { data }); - - if (errors) { - Logger.error(errors); - - throw new Error(errors.map((e) => e.message).join(',')); - } - if (!data.createCustomerV2 || !data.createCustomerV2.customer) { - throw new Error('Customer registration error'); - } - - if (recaptchaToken) { - // generate a new token for the login action - const { recaptchaInstance } = params; - const newRecaptchaToken = await recaptchaInstance.getResponse(); - - return factoryParams.logIn(context, { username: email, password, recaptchaToken: newRecaptchaToken }); - } - - return factoryParams.logIn(context, { username: email, password }); - }, - logIn: async (context: Context, params: any) => { - Logger.debug('[Magento] Authenticate user'); - const apiState = context.$magento.config.state; - - const { data, errors } = await context.$magento.api.generateCustomerToken( - { - email: params.username, - password: params.password, - recaptchaToken: params.recaptchaToken, - }, - ); - - Logger.debug('[Result]:', { data }); - - if (errors) { - Logger.error(errors); - - throw new Error(errors.map((e) => e.message).join(',')); - } - if (!data.generateCustomerToken || !data.generateCustomerToken.token) { - throw new Error('Customer sign-in error'); - } - apiState.setCustomerToken(data.generateCustomerToken.token); - - // merge existing cart with customer cart - const currentCartId = apiState.getCartId(); - const cart = await context.$magento.api.customerCart(); - const newCartId = cart.data.customerCart.id; - - if (newCartId && currentCartId && currentCartId !== newCartId) { - const { data: dataMergeCart } = await context.$magento.api.mergeCarts( - { - sourceCartId: currentCartId, - destinationCartId: newCartId, - }, - ); - - context.cart.setCart(dataMergeCart.mergeCarts); - - apiState.setCartId(dataMergeCart.mergeCarts.id); - } else { - context.cart.setCart(cart.data.customerCart); - } - - await context.$magento.api.wishlist({}); - - return factoryParams.load(context); - }, - - changePassword: async (context: Context, params) => { - Logger.debug('[Magento] changing user password'); - const { data, errors } = await context.$magento.api.changeCustomerPassword(params); - if (errors) { - Logger.error(errors); - throw new Error(errors.map((e) => e.message).join(',')); - } - - Logger.debug('[Result] ', { data }); - - return data?.changeCustomerPassword; - }, -}; - -export default useUserFactory< -any, -UpdateCustomerEmailMutationVariables, -CustomerCreateInput & { email: string; password: string, recaptchaToken?: string } ->(factoryParams); diff --git a/packages/composables/src/composables/useUserBilling/index.ts b/packages/composables/src/composables/useUserBilling/index.ts deleted file mode 100644 index d2b9dbb33..000000000 --- a/packages/composables/src/composables/useUserBilling/index.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, - useUserBillingFactory, - UseUserBillingFactoryParams, -} from '@vue-storefront/core'; - -import { CustomerAddress } from '@vue-storefront/magento-api'; -import useUser from '../useUser'; -import { transformUserCreateAddressInput, transformUserUpdateAddressInput } from '../../helpers/userAddressManipulator'; - -const factoryParams: UseUserBillingFactoryParams = { - provide() { - return { - user: useUser(), - }; - }, - addAddress: async (context: Context, params?) => { - Logger.debug('[Magento]: add billing address', { params }); - - const { data } = await context.$magento.api.createCustomerAddress(transformUserCreateAddressInput(params)); - - Logger.debug('[Result]:', { data }); - - return data?.createCustomerAddress ?? {}; - }, - - deleteAddress: async (context: Context, params?) => { - Logger.debug('[Magento] delete billing address', { params }); - - const { data } = await context.$magento.api.deleteCustomerAddress(params.address.id); - - Logger.debug('[Result]:', { data }); - - return data?.deleteCustomerAddress ?? {}; - }, - - updateAddress: async (context: Context, params?) => { - Logger.debug('[Magento] update billing address', { params }); - - const { data } = await context.$magento.api.updateCustomerAddress(transformUserUpdateAddressInput(params)); - - Logger.debug('[Result]:', { data }); - - return data?.updateCustomerAddress ?? {}; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - load: async (context: Context, _params?) => { - Logger.debug('[Magento] load user address'); - - if (!context.user.user?.value?.id) { - await context.user.load(); - } - - return context.user.user?.value; - }, - - setDefaultAddress: async (context: Context, params?) => { - Logger.debug('[Magento] setDefaultAddress'); - - const { data } = await context.$magento.api.updateCustomerAddress(transformUserUpdateAddressInput(params)); - - Logger.debug('[Result]:', { data }); - - return data?.updateCustomerAddress ?? {}; - }, -}; - -export default useUserBillingFactory(factoryParams); diff --git a/packages/composables/src/composables/useUserOrder/index.ts b/packages/composables/src/composables/useUserOrder/index.ts deleted file mode 100644 index 24099be8d..000000000 --- a/packages/composables/src/composables/useUserOrder/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, - useUserOrderFactory, - UseUserOrderFactoryParams, -} from '@vue-storefront/core'; -import { GetOrdersSearchParams } from '@vue-storefront/magento-api'; -import useUser from '../useUser'; - -const factoryParams: UseUserOrderFactoryParams = { - provide() { - return { - user: useUser(), - }; - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - searchOrders: async (context: Context, params) => { - Logger.debug('[Magento] search user orders', { params }); - - if (!context.user.user?.value?.id) { - await context.user.load(); - } - - const { data } = await context.$magento.api.customerOrders(params); - - Logger.debug('[Result]:', { data }); - - return data?.customer?.orders ?? {}; - }, -}; - -export default useUserOrderFactory(factoryParams); diff --git a/packages/composables/src/composables/useUserShipping/index.ts b/packages/composables/src/composables/useUserShipping/index.ts deleted file mode 100644 index 07859bd94..000000000 --- a/packages/composables/src/composables/useUserShipping/index.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, - useUserShippingFactory, - UseUserShippingFactoryParams, -} from '@vue-storefront/core'; -import useUser from '../useUser'; -import { transformUserCreateAddressInput, transformUserUpdateAddressInput } from '../../helpers/userAddressManipulator'; - -const factoryParams: UseUserShippingFactoryParams = { - provide() { - return { - user: useUser(), - }; - }, - - addAddress: async (context: Context, params?) => { - Logger.debug('[Magento]: add shipping address', { params }); - - const { data } = await context.$magento.api.createCustomerAddress( - transformUserCreateAddressInput(params), - ); - - Logger.debug('[Result]:', { data }); - - return data?.createCustomerAddress ?? {}; - }, - - deleteAddress: async (context: Context, params) => { - Logger.debug('[Magento] delete shipping address', { params }); - const { data } = await context.$magento.api.deleteCustomerAddress(params.address.id as number); - - return data?.deleteCustomerAddress ?? {}; - }, - - updateAddress: async (context: Context, params) => { - Logger.debug('[Magento] update shipping address', { params }); - - const { data } = await context.$magento.api.updateCustomerAddress(transformUserUpdateAddressInput(params)); - - return data?.updateCustomerAddress ?? {}; - }, - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - load: async (context: Context, _params?) => { - Logger.debug('[Magento] load user address'); - - if (!context.user.user?.value?.id) { - await context.user.load(); - } - - return context.user.user?.value; - }, - - setDefaultAddress: async (context: Context, params) => { - Logger.debug('[Magento] set default shipping address'); - - const { data } = await context.$magento.api.updateCustomerAddress(transformUserUpdateAddressInput(params)); - - Logger.debug('[Result]:', { data }); - - return data?.updateCustomerAddress ?? {}; - }, -}; - -export default useUserShippingFactory(factoryParams); diff --git a/packages/composables/src/composables/useWishlist/index.ts b/packages/composables/src/composables/useWishlist/index.ts deleted file mode 100644 index fc03c3cdc..000000000 --- a/packages/composables/src/composables/useWishlist/index.ts +++ /dev/null @@ -1,147 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - Context, - Logger, -} from '@vue-storefront/core'; -import useUser from '../useUser'; -import { findItemOnWishlist } from '../../helpers/findItemOnWishlist'; -import { useWishlistFactory, UseWishlistFactoryParams } from '../../factories/useWishlistFactory'; - -/** - * @deprecated since version 1.0.0 - */ -// @ts-ignore -const factoryParams: UseWishlistFactoryParams = { - provide() { - return { - user: useUser(), - }; - }, - // @ts-ignore - load: async (context: Context, params) => { - Logger.debug('[Magento Storefront]: useWishlist.load params->', params); - const apiState = context.$magento.config.state; - - if (apiState.getCustomerToken()) { - const { data } = await context.$magento.api.wishlist(params?.searchParams); - - Logger.debug('[Result]:', { data }); - - return data?.customer?.wishlists ?? []; - } - - return []; - }, - loadItemsCount: async (context: Context, params) => { - Logger.debug('[Magento Storefront]: useWishlist.wishlistItemsCount params->', params); - const apiState = context.$magento.config.state; - - if (apiState.getCustomerToken()) { - const { data } = await context.$magento.api.wishlistItemsCount(); - - Logger.debug('[Result]:', { data }); - - return data?.customer?.wishlists ?? []; - } - - return []; - }, - addItem: async (context, params) => { - const { - currentWishlist, - product, - } = params; - Logger.debug('[Magento Storefront]: useWishlist.addItem params->', params); - if (!currentWishlist) await factoryParams.load(context, {}); - - const itemOnWishlist = findItemOnWishlist(currentWishlist, params.product); - - if (itemOnWishlist) { - return factoryParams.removeItem(context, { - product, - currentWishlist, - }); - } - - if (!context.user.isAuthenticated.value) { - throw new Error('Need to be authenticated to add a product to wishlist'); - } - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - switch (product.__typename) { - case 'VirtualProduct': - case 'DownloadableProduct': - case 'GroupedProduct': - case 'GiftCard': - case 'SimpleProduct': - const { data } = await context.$magento.api.addProductToWishList({ - id: '0', - items: [{ - sku: product.sku, - quantity: 1, - }], - }); - - Logger.debug('[Result]:', { data }); - - return data?.addProductsToWishlist?.wishlist ?? {}; - case 'ConfigurableProduct': - const { data: configurableProductData } = await context.$magento.api.addProductToWishList({ - id: '0', - items: [{ - sku: product.configurable_product_options_selection?.variant?.sku || product.sku, - quantity: 1, - parent_sku: product.sku, - }], - }); - - Logger.debug('[Result]:', { data: configurableProductData }); - - return configurableProductData?.addProductsToWishlist?.wishlist ?? {}; - case 'BundleProduct': - const { data: bundleProductData } = await context.$magento.api.addProductToWishList({ - id: '0', - items: [{ - sku: product.sku, - quantity: 1, - entered_options: product.bundle_options ? [...product.bundle_options] : [], - }], - }); - - Logger.debug('[Result]:', { data: bundleProductData }); - - return bundleProductData?.addProductsToWishlist?.wishlist ?? {}; - default: - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - throw new Error(`Product Type ${product.__typename} not supported in add to wishlist yet`); - } - }, - removeItem: async (context, params) => { - const { currentWishlist } = params; - Logger.debug('[Magento Storefront]: useWishlist.removeItem params->', params); - const itemOnWishlist = findItemOnWishlist(currentWishlist, params.product); - - const { data } = await context.$magento.api.removeProductsFromWishlist({ - id: '0', - items: [itemOnWishlist.id], - }); - - Logger.debug('[Result]:', { data }); - - return data?.removeProductsFromWishlist?.wishlist ?? {}; - }, - clear: () => (Promise.resolve()), - isInWishlist: (_context, params) => { - const { - currentWishlist, - product, - } = params; - const wishlistProduct = findItemOnWishlist(currentWishlist, product); - return !!(wishlistProduct?.id && wishlistProduct?.quantity); - }, -}; - -export default useWishlistFactory(factoryParams); diff --git a/packages/composables/src/context.d.ts b/packages/composables/src/context.d.ts deleted file mode 100644 index fa267d60a..000000000 --- a/packages/composables/src/context.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ApiClientMethods, IntegrationContext } from '@vue-storefront/core'; -import { ClientInstance, Config, MagentoApiMethods } from '@vue-storefront/magento-api'; - -declare module '@vue-storefront/core' { - export interface Context { - $magento: IntegrationContext>; - } -} diff --git a/packages/composables/src/dataTypes.ts b/packages/composables/src/dataTypes.ts deleted file mode 100644 index 379fc89e9..000000000 --- a/packages/composables/src/dataTypes.ts +++ /dev/null @@ -1,19 +0,0 @@ -export { - Product, - Country, - CartItem, - Cart, - Category, - ShippingMethod, - GroupedProduct, - BundleProduct, - ReviewMetadata, - ProductReview, - StoreConfig, - Customer, - Wishlist, - AvailableStores, - Currency, - ConfigState, -} from '@vue-storefront/magento-api'; -export { WishlistProduct } from './getters/wishlistGetters'; diff --git a/packages/composables/src/factories/useAddressesFactory.ts b/packages/composables/src/factories/useAddressesFactory.ts deleted file mode 100644 index 0ef63c9f1..000000000 --- a/packages/composables/src/factories/useAddressesFactory.ts +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - configureFactoryParams, - Context, - CustomQuery, - FactoryParams, - Logger, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { computed, Ref } from '@vue/composition-api'; -import { CustomQueryParams, UseAddresses, UseAddressesErrors } from '../types/composables'; - -export interface UseAddressesParams extends FactoryParams { - load: (context: Context, params?: ComposableFunctionArgs) => Promise; - save: (context: Context, params: ComposableFunctionArgs) => Promise
; - update: (context: Context, params: ComposableFunctionArgs) => Promise
; - remove: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -/** - * @deprecated since version 1.0.0 - */ -export const useAddressesFactory = ( - factoryParams: UseAddressesParams, -) => function useAddresses(): UseAddresses { - const loading: Ref = sharedRef(false, 'useAddresses-loading'); - const addresses: Ref = sharedRef(null, 'useAddresses-shipping'); - const error: Ref = sharedRef({ - load: null, - save: null, - remove: null, - update: null, - }, 'useAddresses-error'); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const load = async (loadParams?: ComposableFunctionArgs) => { - Logger.debug('useAddresses.load'); - - try { - loading.value = true; - const addressesInfo = await _factoryParams.load(loadParams); - error.value.load = null; - addresses.value = addressesInfo; - } catch (err) { - error.value.load = err; - Logger.error('useAddresses/load', err); - } finally { - loading.value = false; - } - }; - - const save = async (saveParams: ComposableFunctionArgs) => { - Logger.debug('useAddresses.save'); - - try { - loading.value = true; - const addressesInfo = await _factoryParams.save(saveParams); - error.value.save = null; - addresses.value = addressesInfo; - } catch (err) { - error.value.save = err; - Logger.error('useAddresses/save', err); - } finally { - loading.value = false; - } - }; - - const update = async (updateParams: ComposableFunctionArgs) => { - Logger.debug('useAddresses.update'); - - try { - loading.value = true; - - const addressesInfo = await _factoryParams.update(updateParams); - - error.value.update = null; - - addresses.value = addressesInfo; - } catch (err) { - error.value.update = err; - - Logger.error('useAddresses.delete', err); - } finally { - loading.value = false; - } - }; - - const remove = async (removeParams: ComposableFunctionArgs) => { - Logger.debug('useAddresses.remove'); - - try { - loading.value = true; - - await _factoryParams.remove(removeParams); - - error.value.remove = null; - } catch (err) { - error.value.remove = err; - - Logger.error('useAddresses.remove', err); - } finally { - loading.value = false; - } - }; - - return { - addresses: computed(() => addresses.value), - error: computed(() => error.value), - load, - loading: computed(() => loading.value), - remove, - save, - update, - }; -}; diff --git a/packages/composables/src/factories/useCartFactory.ts b/packages/composables/src/factories/useCartFactory.ts deleted file mode 100644 index 0eb38492f..000000000 --- a/packages/composables/src/factories/useCartFactory.ts +++ /dev/null @@ -1,289 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - UseCart as UseCartCore, - Context, - FactoryParams, - UseCartErrors as UseCartErrorsCore, - PlatformApi, - sharedRef, - Logger, - configureFactoryParams, - ComposableFunctionArgs, - ComputedProperty, - CustomQuery, -} from '@vue-storefront/core'; -import { computed, Ref } from '@vue/composition-api'; - -export interface UseCartFactoryParams extends FactoryParams { - load: (context: Context, params: ComposableFunctionArgs<{ realCart?: boolean; }>) => Promise; - loadTotalQty: (context: Context) => Promise; - addItem: ( - context: Context, - params: ComposableFunctionArgs<{ - currentCart: CART; - product: PRODUCT; - quantity: any; - }> - ) => Promise; - removeItem: (context: Context, params: ComposableFunctionArgs<{ currentCart: CART; product: CART_ITEM; }>) => Promise; - updateItemQty: ( - context: Context, - params: ComposableFunctionArgs<{ currentCart: CART; product: CART_ITEM; quantity: number; }> - ) => Promise; - clear: (context: Context, params: { currentCart: CART }) => Promise; - applyCoupon: (context: Context, params: ComposableFunctionArgs<{ currentCart: CART; couponCode: string; }>) => Promise<{ updatedCart: CART }>; - removeCoupon: ( - context: Context, - params: ComposableFunctionArgs<{ currentCart: CART; couponCode: string; }> - ) => Promise<{ updatedCart: CART }>; - isInCart: (context: Context, params: { currentCart: CART; product: PRODUCT }) => boolean; -} - -export interface UseCart extends UseCartCore { - totalQuantity: ComputedProperty, - loadTotalQty(params: { - customQuery?: CustomQuery; - }): Promise; -} -export interface UseCartErrors extends UseCartErrorsCore { - loadTotalQty: Error -} - -export const useCartFactory = ( - factoryParams: UseCartFactoryParams, -) => function useCart(): UseCart { - const loading: Ref = sharedRef(false, 'useCart-loading'); - const cart: Ref = sharedRef(null, 'useCart-cart'); - const totalQuantity: Ref = sharedRef(0, 'useCart-totalQuantity'); - const error: Ref = sharedRef({ - addItem: null, - removeItem: null, - updateItemQty: null, - load: null, - clear: null, - applyCoupon: null, - removeCoupon: null, - loadTotalQty: null, - }, 'useCart-error'); - - // eslint-disable-next-line no-underscore-dangle,@typescript-eslint/naming-convention - const _factoryParams = configureFactoryParams( - factoryParams, - { - mainRef: cart, - alias: 'currentCart', - loading, - error, - }, - ); - - const setCart = (newCart: CART) => { - cart.value = newCart; - Logger.debug('useCartFactory.setCart', newCart); - }; - - const addItem = async ({ - product, - quantity, - customQuery, - }) => { - Logger.debug('useCart.addItem', { - product, - quantity, - }); - - try { - loading.value = true; - const updatedCart = await _factoryParams.addItem({ - currentCart: cart.value, - product, - quantity, - customQuery, - }); - error.value.addItem = null; - cart.value = updatedCart; - totalQuantity.value = updatedCart.total_quantity; - } catch (err) { - error.value.addItem = err; - Logger.error('useCart/addItem', err); - } finally { - loading.value = false; - } - }; - - const removeItem = async ({ - product, - customQuery, - }) => { - Logger.debug('useCart.removeItem', { product }); - - try { - loading.value = true; - const updatedCart = await _factoryParams.removeItem({ - currentCart: cart.value, - product, - customQuery, - }); - error.value.removeItem = null; - cart.value = updatedCart; - totalQuantity.value = updatedCart.total_quantity; - } catch (err) { - error.value.removeItem = err; - Logger.error('useCart/removeItem', err); - } finally { - loading.value = false; - } - }; - - const updateItemQty = async ({ - product, - quantity, - customQuery, - }) => { - Logger.debug('useCart.updateItemQty', { - product, - quantity, - }); - - if (quantity && quantity > 0) { - try { - loading.value = true; - const updatedCart = await _factoryParams.updateItemQty({ - currentCart: cart.value, - product, - quantity, - customQuery, - }); - error.value.updateItemQty = null; - cart.value = updatedCart; - totalQuantity.value = updatedCart.total_quantity; - } catch (err) { - error.value.updateItemQty = err; - Logger.error('useCart/updateItemQty', err); - } finally { - loading.value = false; - } - } - }; - - const load = async ({ customQuery } = { customQuery: undefined }) => { - Logger.debug('useCart.load'); - - try { - loading.value = true; - const loadedCart = await _factoryParams.load({ customQuery }); - cart.value = loadedCart; - totalQuantity.value = loadedCart?.total_quantity ?? 0; - error.value.load = null; - } catch (err) { - error.value.load = err; - Logger.error('useCart/load', err); - } finally { - loading.value = false; - } - }; - - const loadTotalQty = async ({ customQuery } = { customQuery: undefined }) => { - Logger.debug('useCart.loadTotalQty'); - - try { - loading.value = true; - totalQuantity.value = await _factoryParams.loadTotalQty({ customQuery }); - error.value.loadTotalQty = null; - } catch (err) { - error.value.loadTotalQty = err; - Logger.error('useCart/loadTotalQty', err); - } finally { - loading.value = false; - } - }; - - const clear = async () => { - Logger.debug('useCart.clear'); - - try { - loading.value = true; - const updatedCart = await _factoryParams.clear({ currentCart: cart.value }); - error.value.clear = null; - cart.value = updatedCart; - totalQuantity.value = 0; - } catch (err) { - error.value.clear = err; - Logger.error('useCart/clear', err); - } finally { - loading.value = false; - } - }; - - const isInCart = ({ product }) => _factoryParams.isInCart({ - currentCart: cart.value, - product, - }); - - const applyCoupon = async ({ - couponCode, - customQuery, - }) => { - Logger.debug('useCart.applyCoupon'); - - try { - loading.value = true; - const { updatedCart } = await _factoryParams.applyCoupon({ - currentCart: cart.value, - couponCode, - customQuery, - }); - error.value.applyCoupon = null; - cart.value = updatedCart; - } catch (err) { - error.value.applyCoupon = err; - Logger.error('useCart/applyCoupon', err); - } finally { - loading.value = false; - } - }; - - const removeCoupon = async ({ - couponCode, - customQuery, - }) => { - Logger.debug('useCart.removeCoupon'); - - try { - loading.value = true; - const { updatedCart } = await _factoryParams.removeCoupon({ - currentCart: cart.value, - couponCode, - customQuery, - }); - error.value.removeCoupon = null; - cart.value = updatedCart; - loading.value = false; - } catch (err) { - error.value.removeCoupon = err; - Logger.error('useCart/removeCoupon', err); - } finally { - loading.value = false; - } - }; - - return { - api: _factoryParams.api, - setCart, - cart: computed(() => cart.value), - totalQuantity, - isInCart, - addItem, - load, - loadTotalQty, - removeItem, - clear, - updateItemQty, - applyCoupon, - removeCoupon, - loading: computed(() => loading.value), - error: computed(() => error.value), - }; -}; diff --git a/packages/composables/src/factories/useCategorySearchFactory.ts b/packages/composables/src/factories/useCategorySearchFactory.ts deleted file mode 100644 index 6d57e185a..000000000 --- a/packages/composables/src/factories/useCategorySearchFactory.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed } from '@vue/composition-api'; -import { - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseCategorySearch, UseCategorySearchErrors } from '../types/composables'; - -export interface UseCategorySearchFactory extends FactoryParams { - search: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export function useCategorySearchFactory( - factoryParams: UseCategorySearchFactory, -) { - return function useCategorySearch(id: string = ''): UseCategorySearch { - const ssrKey = id || 'useCategorySearch'; - // @ts-ignore - const result = sharedRef([], `${ssrKey}-result`); - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - search: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const search = async (params: ComposableFunctionArgs): Promise => { - Logger.debug(`useCategorySearch/${ssrKey}/search`); - - try { - loading.value = true; - - const data = await _factoryParams.search(params); - - result.value = data; - - error.value.search = null; - - return data; - } catch (err) { - error.value.search = err; - Logger.error(`useCategorySearch/${ssrKey}/search`, err); - } finally { - loading.value = false; - } - }; - - return { - search, - result: computed(() => result.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useConfigFactory.ts b/packages/composables/src/factories/useConfigFactory.ts deleted file mode 100644 index cb6b81b50..000000000 --- a/packages/composables/src/factories/useConfigFactory.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed } from '@vue/composition-api'; -import { - Context, - sharedRef, - Logger, - configureFactoryParams, - FactoryParams, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseConfig } from '../types/composables'; - -export interface UseConfigFactoryParams extends FactoryParams{ - loadConfig: (context: Context, params?: ComposableFunctionArgs<{}>) => Promise; -} - -export function useConfigFactory(factoryParams: UseConfigFactoryParams) { - return function useConfig(cacheId: string = ''): UseConfig { - const ssrKey = cacheId || 'useConfigFactory'; - // @ts-ignore - const config = sharedRef({}, `${ssrKey}-config`); - const loading = sharedRef(false, `${ssrKey}-loading`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const loadConfig = async (params?: ComposableFunctionArgs<{}>) => { - Logger.debug(`useConfig/${ssrKey}/loadConfig`); - loading.value = true; - try { - config.value = await _factoryParams.loadConfig(params); - } finally { - loading.value = false; - } - }; - - return { - loadConfig, - config: computed(() => config.value), - loading: computed(() => loading.value), - }; - }; -} diff --git a/packages/composables/src/factories/useContentFactory.ts b/packages/composables/src/factories/useContentFactory.ts deleted file mode 100644 index 771bee30d..000000000 --- a/packages/composables/src/factories/useContentFactory.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed, Ref } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { UseContentErrors, UseContent } from '../types/composables'; - -export interface UseContentFactoryParams extends FactoryParams{ - loadContent: (context: Context, params: ComposableFunctionArgs<{ identifier: string }>) => Promise; - loadBlocks: (context: Context, params: ComposableFunctionArgs<{ identifiers: string[] }>) => Promise; -} - -export function useContentFactory( - factoryParams: UseContentFactoryParams, -) { - return function useContent(ssrKey = 'useConfigFactory'): UseContent { - // @ts-ignore - const page = sharedRef({}, `useContent-content-${ssrKey}`); - const errors: Ref = sharedRef({ - content: null, - blocks: null, - }, 'useContent-error'); - const blocks = sharedRef([], `useContent-blocks-${ssrKey}`); - const loading = sharedRef(false, `useContent-loading-${ssrKey}`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const loadContent = async (params: ComposableFunctionArgs<{ identifier: string }>) => { - Logger.debug(`useContent/${ssrKey}/loadPage`); - loading.value = true; - - try { - errors.value.content = null; - page.value = await _factoryParams.loadContent(params); - } catch (error) { - errors.value.content = error; - } finally { - loading.value = false; - } - }; - - const loadBlocks = async (params: ComposableFunctionArgs<{ identifiers: string[] }>) => { - Logger.debug(`useContent/${ssrKey}/loadBlocks`); - loading.value = true; - - try { - errors.value.blocks = null; - blocks.value = await _factoryParams.loadBlocks(params); - } catch (error) { - errors.value.blocks = error; - } finally { - loading.value = false; - } - }; - - return { - loadContent, - loadBlocks, - loading: computed(() => loading.value), - page: computed(() => page.value), - blocks: computed(() => blocks.value), - error: computed(() => errors.value), - }; - }; -} diff --git a/packages/composables/src/factories/useCountrySearchFactory.ts b/packages/composables/src/factories/useCountrySearchFactory.ts deleted file mode 100644 index b51aed631..000000000 --- a/packages/composables/src/factories/useCountrySearchFactory.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed } from '@vue/composition-api'; -import { - Context, - sharedRef, - Logger, - configureFactoryParams, - FactoryParams, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseCountrySearch, UseCountrySearchErrors } from '../types/composables'; - -export interface UseCountryFactoryParams extends FactoryParams{ - load: (context: Context, params?: ComposableFunctionArgs<{}>) => Promise; - search: (context: Context, params: ComposableFunctionArgs<{ id: string }>) => Promise; -} - -export function useCountrySearchFactory(factoryParams: UseCountryFactoryParams) { - return function useCountrySearch(cacheId: string = ''): UseCountrySearch { - const ssrKey = cacheId || 'useCountrySearchFactory'; - const countries = sharedRef([], `${ssrKey}-countries`); - // @ts-ignore - const country = sharedRef({}, `${ssrKey}-country`); - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - load: null, - search: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const load = async (params?: ComposableFunctionArgs<{}>): Promise => { - Logger.debug(`useCountrySearch/${ssrKey}/load`); - - try { - loading.value = true; - - const data = await _factoryParams.load(params); - - countries.value = data; - - error.value.load = null; - - return data; - } catch (err) { - error.value.load = err; - Logger.error(`useCountrySearch/${ssrKey}/load`, err); - } finally { - loading.value = false; - } - }; - - // eslint-disable-next-line consistent-return - const search = async (params: ComposableFunctionArgs<{ id: string }>): Promise => { - Logger.debug(`useCountrySearch/${ssrKey}/search`); - - try { - loading.value = true; - - const data = await _factoryParams.search(params); - - country.value = data; - - error.value.search = null; - - return data; - } catch (err) { - error.value.search = err; - Logger.error(`useCountrySearch/${ssrKey}/search`, err); - } finally { - loading.value = false; - } - }; - - return { - load, - search, - countries: computed(() => countries.value), - country: computed(() => country.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useCurrencyFactory.ts b/packages/composables/src/factories/useCurrencyFactory.ts deleted file mode 100644 index 51f652f6f..000000000 --- a/packages/composables/src/factories/useCurrencyFactory.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable @typescript-eslint/no-misused-promises */ -/** - * @deprecated since version 1.0.0 - */ -import { computed } from '@vue/composition-api'; -import { - Context, - sharedRef, - Logger, - configureFactoryParams, - FactoryParams, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseCurrency } from '../types/composables'; - -export interface UseCurrencyFactoryParams extends FactoryParams { - load: (context: Context, params?: ComposableFunctionArgs<{}>) => Promise; - change: (context: Context, params: ComposableFunctionArgs<{ id: string }>) => void -} - -export function useCurrencyFactory(factoryParams: UseCurrencyFactoryParams) { - return function useCurrency(cacheId: string = ''): UseCurrency { - const ssrKey = cacheId || 'useCurrencyFactory'; - // @ts-ignore - const currencies = sharedRef([], `${ssrKey}-currencies`); - const loading = sharedRef(false, `${ssrKey}-loading`); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const load = async (params?: ComposableFunctionArgs<{}>) => { - Logger.debug(`useCurrency/${ssrKey}/load`); - loading.value = true; - try { - currencies.value = await _factoryParams.load(params); - } finally { - loading.value = false; - } - }; - - const change = async (params: ComposableFunctionArgs<{ id: string }>) => { - Logger.debug(`useCurrency/${ssrKey}/change`); - loading.value = true; - try { - await _factoryParams.change(params); - } finally { - loading.value = false; - } - }; - - return { - load, - change, - currencies: computed(() => currencies.value), - loading: computed(() => loading.value), - }; - }; -} diff --git a/packages/composables/src/factories/useCustomQueryFactory.ts b/packages/composables/src/factories/useCustomQueryFactory.ts deleted file mode 100644 index 9ea5b52f2..000000000 --- a/packages/composables/src/factories/useCustomQueryFactory.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * @deprecated Will be removed in 1.1.0 release - * @use @vue-storefront/magento-theme/composables/useApi instead - */ -import { - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { computed } from '@vue/composition-api'; -import { FetchPolicy } from '../types'; -import { UseCustomQuery } from '../types/composables'; - -/** - * @deprecated Will be removed in 1.1.0 release - * @use @vue-storefront/magento-theme/composables/useApi instead - */ -export interface UseCustomQueryFactoryFactoryParams extends FactoryParams { - query: (context: Context, { - variables, - fetchPolicy, - }: { - variables: QUERY_VARIABLES, - fetchPolicy?: FetchPolicy, - }) => Promise; -} - -export const useCustomQueryFactory = ( - factoryParams: UseCustomQueryFactoryFactoryParams, -) => function useCustomQuery(ssrKey = 'useCustomQuery'): UseCustomQuery { - // @ts-ignore - const queryString = sharedRef('', `${ssrKey}-queryString`); - const queryStringComputed = computed(() => queryString.value); - // @ts-ignore - const result = sharedRef({}, `${ssrKey}-result`); - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - query: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const query = async ({ - variables, - fetchPolicy, - }: { - variables: QUERY_VARIABLES, - fetchPolicy?: FetchPolicy, - // eslint-disable-next-line consistent-return - }) => { - Logger.debug(`useCustomQuery/${ssrKey}/query`); - loading.value = true; - - try { - const data = await _factoryParams.query({ - query: queryStringComputed.value, - variables, - fetchPolicy, - }); - - result.value = data; - - return data; - } catch (err) { - error.value.search = err; - - Logger.error(`useCustomQuery/${ssrKey}/query`, err); - } finally { - loading.value = false; - } - }; - - return { - setQueryString: (newQueryString: string) => { - queryString.value = newQueryString; - }, - queryString: queryStringComputed, - query, - result: computed(() => result.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; -}; diff --git a/packages/composables/src/factories/useExternalCheckoutFactory.ts b/packages/composables/src/factories/useExternalCheckoutFactory.ts deleted file mode 100644 index fd8be7198..000000000 --- a/packages/composables/src/factories/useExternalCheckoutFactory.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { computed } from '@vue/composition-api'; -import { UseExternalCheckout } from '../types/composables'; - -export interface UseExternalCheckoutFactoryParams extends FactoryParams { - initializeCheckout: (context: Context, params: ComposableFunctionArgs<{ baseUrl: string }>) => Promise; -} - -export const useExternalCheckoutFactory = ( - factoryParams: UseExternalCheckoutFactoryParams, -) => { - function useExternalCheckout(ssrKey = 'useExternalCheckout'): UseExternalCheckout { - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - search: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line @typescript-eslint/require-await,consistent-return - const initializeCheckout = async (params: ComposableFunctionArgs<{ baseUrl: string }>): Promise => { - Logger.debug(`useExternalCheckout/${ssrKey}/initializeCheckout`); - loading.value = true; - - try { - return _factoryParams.initializeCheckout(params); - } catch (err) { - error.value.search = err; - - Logger.error(`useExternalCheckout/${ssrKey}/initializeCheckout`, err); - } finally { - loading.value = false; - } - }; - - return { - initializeCheckout, - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - } - - return useExternalCheckout; -}; diff --git a/packages/composables/src/factories/useForgotPasswordFactory.ts b/packages/composables/src/factories/useForgotPasswordFactory.ts deleted file mode 100644 index a0fc0173f..000000000 --- a/packages/composables/src/factories/useForgotPasswordFactory.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Ref, computed } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, -} from '@vue-storefront/core'; -import { UseForgotPassword, UseForgotPasswordErrors } from '../types/composables'; - -interface SetNewPasswordParams { - tokenValue: string; - newPassword: string; - email: string; - recaptchaToken?: string; -} - -interface ResetPasswordParams { - email: string; - recaptchaToken?: string; -} - -export interface UseForgotPasswordFactoryParams extends FactoryParams { - resetPassword: (context: Context, params: ComposableFunctionArgs) => Promise; - setNewPassword: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export function useForgotPasswordFactory( - factoryParams: UseForgotPasswordFactoryParams, -) { - return function useForgotPassword(): UseForgotPassword { - const result: Ref = sharedRef({ - resetPasswordResult: null, - setNewPasswordResult: null, - }, 'useForgotPassword-result'); - const loading = sharedRef(false, 'useProduct-loading'); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - const error: Ref = sharedRef({ - request: null, - setNew: null, - }, 'useForgotPassword-error'); - - const request = async (resetPasswordParams: ComposableFunctionArgs) => { - Logger.debug('useForgotPassword/request', resetPasswordParams.email); - - try { - loading.value = true; - // eslint-disable-next-line no-underscore-dangle - result.value = await _factoryParams.resetPassword({ currentResult: result.value, ...resetPasswordParams }); - error.value.request = null; - } catch (err) { - error.value.request = err; - Logger.error('useForgotPassword/request', err); - } finally { - loading.value = false; - } - }; - - const setNew = async (setNewPasswordParams: ComposableFunctionArgs) => { - Logger.debug('useForgotPassword/setNew', setNewPasswordParams); - - try { - loading.value = true; - // eslint-disable-next-line no-underscore-dangle - result.value = await _factoryParams.setNewPassword({ currentResult: result.value, ...setNewPasswordParams }); - error.value.setNew = null; - } catch (err) { - error.value.setNew = err; - Logger.error('useForgotPassword/setNew', err); - } finally { - loading.value = false; - } - }; - - return { - request, - setNew, - result: computed(() => result.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useGetShippingMethodsFactory.ts b/packages/composables/src/factories/useGetShippingMethodsFactory.ts deleted file mode 100644 index b76ec4fb2..000000000 --- a/packages/composables/src/factories/useGetShippingMethodsFactory.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed, Ref } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { UseGetShippingMethods, UseGetShippingMethodsErrors } from '../types/composables'; - -export interface UseGetShippingMethodsFactory extends FactoryParams { - load: (context: Context, params: ComposableFunctionArgs<{ cartId: string }>) => Promise; -} - -export function useGetShippingMethodsFactory( - factoryParams: UseGetShippingMethodsFactory, -) { - return function useGetShippingMethods(id: string = ''): UseGetShippingMethods { - // @ts-ignore - const state: Ref = sharedRef(null, 'UseGetShippingMethods-response'); - const ssrKey = id || 'useGetShippingMethods'; - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - load: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const load = async (params: ComposableFunctionArgs<{ cartId: string }>): Promise => { - Logger.debug(`useGetShippingMethods/${ssrKey}/load`, { params }); - - try { - loading.value = true; - - const data = await _factoryParams.load(params); - - state.value = data; - - error.value.search = null; - - return data; - } catch (err) { - error.value.search = err; - Logger.error(`useGetShippingMethods/${ssrKey}/load`, err); - } finally { - loading.value = false; - } - }; - - const setState = (newState: SHIPPING_METHOD[]) => { - state.value = newState; - Logger.debug('useGetShippingMethods.setState', newState); - }; - - return { - state, - setState, - load, - result: computed(() => state.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useGuestUserFactory.ts b/packages/composables/src/factories/useGuestUserFactory.ts deleted file mode 100644 index 89dab407a..000000000 --- a/packages/composables/src/factories/useGuestUserFactory.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Ref, computed } from '@vue/composition-api'; -import { - Context, - configureFactoryParams, - FactoryParams, - Logger, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseGuestUser, UseGuestUserErrors } from '../types/composables'; - -export interface UseGuestUserFactoryParams extends FactoryParams { - attachToCart: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export const useGuestUserFactory = ( - factoryParams: UseGuestUserFactoryParams, -) => function useGuestUser(): UseGuestUser { - const errorsFactory = (): UseGuestUserErrors => ({ - attachToCart: null, - }); - - const guestUser: Ref = sharedRef(null, 'useGuestUser-user'); - const loading: Ref = sharedRef(false, 'useGuestUser-loading'); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - const error: Ref = sharedRef(errorsFactory(), 'useGuestUser-error'); - - const setGuestUser = (newUser: GUEST_USER) => { - guestUser.value = newUser; - Logger.debug('useGuestUserFactory.setGuestUser', newUser); - }; - - const resetErrorValue = () => { - error.value = errorsFactory(); - }; - - const attachToCart = async (params: ComposableFunctionArgs) => { - Logger.debug('useGuestUserFactory.attachToCart', { params }); - resetErrorValue(); - - try { - loading.value = true; - guestUser.value = await _factoryParams.attachToCart(params); - error.value.attachToCart = null; - } catch (err) { - error.value.attachToCart = err; - Logger.error('useGuestUser/attachToCart', err); - } finally { - loading.value = false; - } - }; - - return { - setGuestUser, - attachToCart, - guestUser: computed(() => guestUser.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; -}; diff --git a/packages/composables/src/factories/useMutationQueryFactory.ts b/packages/composables/src/factories/useMutationQueryFactory.ts deleted file mode 100644 index 2fd03433d..000000000 --- a/packages/composables/src/factories/useMutationQueryFactory.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { computed } from '@vue/composition-api'; -import { UseCustomMutation } from '../types/composables'; -import { FetchPolicy } from '../types'; - -export interface UseCustomMutationFactoryFactoryParams< - MUTATION_VARIABLES, - MUTATION_RETURN, - API extends PlatformApi = any> extends FactoryParams { - mutation: (context: Context, { - variables, - fetchPolicy, - }: { - variables: MUTATION_VARIABLES, - fetchPolicy?: FetchPolicy, - }) => Promise; -} - -export const useCustomMutationFactory = ( - factoryParams: UseCustomMutationFactoryFactoryParams, -) => function useCustomMutation(ssrKey = 'useCustomMutation'): UseCustomMutation { - // @ts-ignore - const mutationString = sharedRef('', `${ssrKey}-mutationString`); - const mutationStringComputed = computed(() => mutationString.value); - // @ts-ignore - const result = sharedRef({}, `${ssrKey}-result`); - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - query: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const mutation = async ({ - variables, - fetchPolicy, - }: { - variables: MUTATION_VARIABLES, - fetchPolicy?: FetchPolicy, - // eslint-disable-next-line consistent-return - }) => { - Logger.debug(`useCustomMutation/${ssrKey}/mutation`); - loading.value = true; - - try { - const data = await _factoryParams.mutation({ - mutation: mutationStringComputed.value, - variables, - fetchPolicy, - }); - - result.value = data; - - return data; - } catch (err) { - error.value.search = err; - - Logger.error(`useCustomMutation/${ssrKey}/mutation`, err); - } finally { - loading.value = false; - } - }; - - return { - setMutationString: (newMutationString: string) => { - mutationString.value = newMutationString; - }, - mutationString: mutationStringComputed, - mutation, - result: computed(() => result.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; -}; diff --git a/packages/composables/src/factories/useNewsletterFactory.ts b/packages/composables/src/factories/useNewsletterFactory.ts deleted file mode 100644 index 61acf3984..000000000 --- a/packages/composables/src/factories/useNewsletterFactory.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @deprecated since version1.0.0 - */ -import { Ref, computed } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { UseNewsletter, UseNewsletterErrors } from '../types/composables'; - -export interface UseNewsletterFactoryParams extends FactoryParams { - updateSubscription: (context: Context, params: ComposableFunctionArgs<{ email: UPDATE_NEWSLETTER_PARAMS }>) => Promise; -} - -export const useNewsletterFactory = ( - factoryParams: UseNewsletterFactoryParams, -) => function useNewsletter(): UseNewsletter { - const errorsFactory = (): UseNewsletterErrors => ({ - updateSubscription: null, - }); - - const loading: Ref = sharedRef(false, 'useNewsletter-loading'); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - const error: Ref = sharedRef(errorsFactory(), 'useNewsletter-error'); - - const resetErrorValue = () => { - error.value = errorsFactory(); - }; - - const updateSubscription = async (params: ComposableFunctionArgs<{ email: UPDATE_NEWSLETTER_PARAMS }>) => { - Logger.debug('useNewsletterFactory.updateSubscription', params); - resetErrorValue(); - - try { - loading.value = true; - await _factoryParams.updateSubscription(params); - error.value.updateSubscription = null; - } catch (err) { - error.value.updateSubscription = err; - Logger.error('useNewsletter/updateSubscription', err); - } finally { - loading.value = false; - } - }; - - return { - error: computed(() => error.value), - loading: computed(() => loading.value), - updateSubscription, - }; -}; diff --git a/packages/composables/src/factories/usePaymentProviderFactory.ts b/packages/composables/src/factories/usePaymentProviderFactory.ts deleted file mode 100644 index ac6fda02b..000000000 --- a/packages/composables/src/factories/usePaymentProviderFactory.ts +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Ref, computed } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { UsePaymentProvider, UsePaymentProviderErrors } from '../types/composables'; - -export interface UsePaymentProviderParams extends FactoryParams { - load: (context: Context, params?: ComposableFunctionArgs<{ }>) => Promise; - save: (context: Context, params: ComposableFunctionArgs<{ paymentMethod: PAYMENT_METHOD }>) => Promise; -} - -export const usePaymentProviderFactory = ( - factoryParams: UsePaymentProviderParams, -) => function usePaymentProvider(): UsePaymentProvider { - const loading: Ref = sharedRef(false, 'usePaymentProvider-loading'); - const state: Ref = sharedRef(null, 'usePaymentProvider-response'); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - const error: Ref = sharedRef({ - load: null, - save: null, - }, 'usePaymentProvider-error'); - - const setState = (newState: STATE) => { - state.value = newState; - Logger.debug('usePaymentProvider.setState', newState); - }; - - const save = async (params: ComposableFunctionArgs<{ paymentMethod: PAYMENT_METHOD }>) => { - Logger.debug('usePaymentProvider.save'); - - try { - loading.value = true; - state.value = await _factoryParams.save({ - paymentMethod: params.paymentMethod || {}, - customQuery: params?.customQuery || {}, - state, - }); - error.value.save = null; - } catch (err) { - error.value.save = err; - Logger.error('usePaymentProvider/save', err); - } finally { - loading.value = false; - } - }; - - const load = async (params?: ComposableFunctionArgs<{}>) => { - Logger.debug('usePaymentProvider.load'); - - try { - loading.value = true; - state.value = await _factoryParams.load({ - customQuery: params?.customQuery || {}, - state, - }); - error.value.load = null; - } catch (err) { - error.value.load = err; - Logger.error('usePaymentProvider/load', err); - } finally { - loading.value = false; - } - }; - - return { - state, - loading: computed(() => loading.value), - error: computed(() => error.value), - load, - save, - setState, - }; -}; diff --git a/packages/composables/src/factories/useRelatedProductsFactory.ts b/packages/composables/src/factories/useRelatedProductsFactory.ts deleted file mode 100644 index 54e5bf676..000000000 --- a/packages/composables/src/factories/useRelatedProductsFactory.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed, Ref } from '@vue/composition-api'; -import { - configureFactoryParams, - Context, - FactoryParams, - Logger, - ProductsSearchParams, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseRelatedProducts, UseRelatedProductsErrors } from '../types/composables'; - -export interface UseRelatedProductsFactoryParams< - PRODUCTS, - RELATED_PRODUCTS_SEARCH_PARAMS extends ProductsSearchParams, - API extends PlatformApi = any, -> extends FactoryParams { - productsSearch: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export function useRelatedProductsFactory( - factoryParams: UseRelatedProductsFactoryParams, -) { - return function useRelatedProduct(id: string): UseRelatedProducts { - const products: Ref = sharedRef([], `useRelatedProducts-products-${id}`); - const loading = sharedRef(false, `useRelatedProducts-loading-${id}`); - const error: Ref = sharedRef({ - search: null, - }, `useRelatedProducts-error-${id}`); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams( - factoryParams, - { - mainRef: products, alias: 'relatedProducts-currentProduct', loading, error, - }, - ); - - const search = async (searchParams: ComposableFunctionArgs) => { - Logger.debug(`useRelatedProducts/${id}/search`, searchParams); - - try { - loading.value = true; - products.value = await _factoryParams.productsSearch(searchParams); - error.value.search = null; - } catch (err) { - error.value.search = err; - Logger.error(`useRelatedProducts/${id}/search`, err); - } finally { - loading.value = false; - } - }; - - return { - search, - products: computed(() => products.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useReviewFactory.ts b/packages/composables/src/factories/useReviewFactory.ts deleted file mode 100644 index bf4896af5..000000000 --- a/packages/composables/src/factories/useReviewFactory.ts +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Ref, computed } from '@vue/composition-api'; -import { - ComposableFunctionArgs, - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - PlatformApi, -} from '@vue-storefront/core'; -import { UseReview, UseReviewErrors } from '../types/composables'; - -export interface UseReviewFactoryParams extends FactoryParams { - searchReviews: (context: Context, params: ComposableFunctionArgs) => Promise; - addReview: (context: Context, params: ComposableFunctionArgs) => Promise; - loadReviewMetadata: (context: Context, params?: ComposableFunctionArgs<{}>) => Promise; - loadCustomerReviews: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export function useReviewFactory< - REVIEW, - REVIEWS_SEARCH_PARAMS, - REVIEWS_USER_SEARCH_PARAMS, - REVIEW_ADD_PARAMS, - REVIEW_METADATA, - API extends PlatformApi = any>( - factoryParams: UseReviewFactoryParams, -) { - return function useReview(id: string): UseReview { - const reviews: Ref = sharedRef([], `useReviews-reviews-${id}`); - const metadatas: Ref = sharedRef([], `useReviews-metadata-${id}`); - const loading: Ref = sharedRef(false, `useReviews-loading-${id}`); - const error: Ref = sharedRef({ - search: null, - addReview: null, - loadReviewMetadata: null, - loadCustomerReviews: null, - }, `useReviews-error-${id}`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const search = async (searchParams?: ComposableFunctionArgs): Promise => { - Logger.debug(`useReview/${id}/search`, searchParams); - - try { - loading.value = true; - reviews.value = await _factoryParams.searchReviews(searchParams); - error.value.search = null; - } catch (err) { - error.value.search = err; - Logger.error(`useReview/${id}/search`, err); - } finally { - loading.value = false; - } - }; - - const loadCustomerReviews = async (): Promise => { - Logger.debug(`useReview/${id}/loadCustomerReviews`); - - try { - loading.value = true; - reviews.value = await _factoryParams.loadCustomerReviews(); - error.value.loadCustomerReviews = null; - } catch (err) { - error.value.loadCustomerReviews = err; - Logger.error(`useReview/${id}/loadCustomerReviews`, err); - } finally { - loading.value = false; - } - }; - - const loadReviewMetadata = async (params?: ComposableFunctionArgs<{}>): Promise => { - Logger.debug(`useReview/${id}/loadReviewMetadata`); - - try { - loading.value = true; - metadatas.value = await _factoryParams.loadReviewMetadata(params); - error.value.loadReviewMetadata = null; - } catch (err) { - error.value.loadReviewMetadata = err; - Logger.error(`useReview/${id}/loadReviewMetadata`, err); - } finally { - loading.value = false; - } - }; - - const addReview = async (params: ComposableFunctionArgs): Promise => { - Logger.debug(`useReview/${id}/addReview`, params); - - try { - loading.value = true; - reviews.value = await _factoryParams.addReview(params); - error.value.addReview = null; - } catch (err) { - error.value.addReview = err; - Logger.error(`useReview/${id}/addReview`, err); - } finally { - loading.value = false; - } - }; - - return { - search, - addReview, - loadReviewMetadata, - loadCustomerReviews, - metadata: computed(() => metadatas.value), - reviews: computed(() => reviews.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useStoreFactory.ts b/packages/composables/src/factories/useStoreFactory.ts deleted file mode 100644 index c5fa07ece..000000000 --- a/packages/composables/src/factories/useStoreFactory.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed } from '@vue/composition-api'; -import { - Context, - sharedRef, - Logger, - configureFactoryParams, - FactoryParams, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseStore } from '../types/composables'; - -export interface UseStoreFactoryParams extends FactoryParams { - load: (context: Context, params?: ComposableFunctionArgs<{}>) => Promise; - change: (context: Context, params: ComposableFunctionArgs) => void; -} - -export function useStoreFactory(factoryParams: UseStoreFactoryParams) { - return function useStore(cacheId: string = ''): UseStore { - const ssrKey = cacheId || 'useStoreFactory'; - // @ts-ignore - const stores = sharedRef([], `${ssrKey}-stores`); - const loading = sharedRef(false, `${ssrKey}-loading`); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - const load = async (params?: ComposableFunctionArgs<{}>) => { - Logger.debug(`useStore/${ssrKey}/load`); - loading.value = true; - try { - stores.value = await _factoryParams.load(params); - } finally { - loading.value = false; - } - }; - - const change = (store: ComposableFunctionArgs) => { - loading.value = true; - try { - _factoryParams.change(store); - } finally { - loading.value = false; - } - }; - - return { - load, - change, - stores: computed(() => stores.value), - loading: computed(() => loading.value), - }; - }; -} diff --git a/packages/composables/src/factories/useUpsellProductsFactory.ts b/packages/composables/src/factories/useUpsellProductsFactory.ts deleted file mode 100644 index d73818778..000000000 --- a/packages/composables/src/factories/useUpsellProductsFactory.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { computed, Ref } from '@vue/composition-api'; -import { - configureFactoryParams, - FactoryParams, - Logger, - Context, - ProductsSearchParams, - sharedRef, - UseProductFactoryParams, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { UseUpsellProducts, UseUpsellProductsErrors } from '../types/composables'; - -export interface UseUpsellProductsFactoryParams< - PRODUCTS, - UPSELL_PRODUCTS_SEARCH_PARAMS extends ProductsSearchParams, - API extends PlatformApi = any, -> extends FactoryParams { - productsSearch: (context: Context, params: ComposableFunctionArgs) => Promise; -} - -export function useUpsellProductsFactory( - factoryParams: UseProductFactoryParams, -) { - return function useUpsellProducts(id: string): UseUpsellProducts { - const products: Ref = sharedRef([], `useUpsellProducts-products-${id}`); - const loading = sharedRef(false, `useUpsellProducts-loading-${id}`); - const error: Ref = sharedRef({ - search: null, - }, `useUpsellProducts-error-${id}`); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams( - factoryParams, - { - mainRef: products, alias: 'useUpsellProducts-currentProducts', loading, error, - }, - ); - - const search = async (searchParams: ComposableFunctionArgs) => { - Logger.debug(`useUpsellProducts/${id}/search`, searchParams); - - try { - loading.value = true; - products.value = await _factoryParams.productsSearch(searchParams); - error.value.search = null; - } catch (err) { - error.value.search = err; - Logger.error(`useUpsellProducts/${id}/search`, err); - } finally { - loading.value = false; - } - }; - - return { - search, - products: computed(() => products.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; - }; -} diff --git a/packages/composables/src/factories/useUrlResolverFactory.ts b/packages/composables/src/factories/useUrlResolverFactory.ts deleted file mode 100644 index 853733c6c..000000000 --- a/packages/composables/src/factories/useUrlResolverFactory.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - configureFactoryParams, - Context, - FactoryParams, - Logger, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { computed } from '@vue/composition-api'; -import { UseUrlResolver } from '../types/composables'; - -export interface UseUrlResolverFactoryParams extends FactoryParams { - search: (context: Context, params: ComposableFunctionArgs<{ url: string }>) => Promise; -} - -export const useUrlResolverFactory = ( - factoryParams: UseUrlResolverFactoryParams, -) => function useRouter(ssrKey = 'useRouter'): UseUrlResolver { - // @ts-ignore - const result = sharedRef({}, `${ssrKey}-result`); - const loading = sharedRef(false, `${ssrKey}-loading`); - const error = sharedRef({ - search: null, - }, `${ssrKey}-error`); - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams(factoryParams); - - // eslint-disable-next-line consistent-return - const search = async (params: ComposableFunctionArgs<{ url: string }>) => { - Logger.debug(`useRouter/${ssrKey}/search`); - loading.value = true; - - try { - const data = await _factoryParams.search(params); - - result.value = data; - - return data; - } catch (err) { - error.value.search = err; - - Logger.error(`useRouter/${ssrKey}/search`, err); - } finally { - loading.value = false; - } - }; - - return { - search, - result: computed(() => result.value), - loading: computed(() => loading.value), - error: computed(() => error.value), - }; -}; diff --git a/packages/composables/src/factories/useWishlistFactory.ts b/packages/composables/src/factories/useWishlistFactory.ts deleted file mode 100644 index 81f053679..000000000 --- a/packages/composables/src/factories/useWishlistFactory.ts +++ /dev/null @@ -1,210 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Ref } from '@vue/composition-api'; -import { - configureFactoryParams, - Context, - CustomQuery, - FactoryParams, - Logger, - sharedRef, - ComposableFunctionArgs, - PlatformApi, -} from '@vue-storefront/core'; -import { Wishlist } from '@vue-storefront/magento-api'; -import { UseWishlist, UseWishlistErrors } from '../types/composables'; - -export interface UseWishlistFactoryParams extends FactoryParams { - load: (context: Context, params: ComposableFunctionArgs<{ - searchParams?: Partial<{ - currentPage: number; - pageSize: number; - }>, - }>) => Promise; - loadItemsCount: (context: Context, params: ComposableFunctionArgs<{ - searchParams?: Partial<{ - currentPage: number; - pageSize: number; - }>, - }>) => Promise; - addItem: ( - context: Context, - params: ComposableFunctionArgs<{ - currentWishlist: WISHLIST; - product: PRODUCT; - }>) => Promise; - removeItem: ( - context: Context, - params: ComposableFunctionArgs<{ - currentWishlist: WISHLIST; - product: WISHLIST_ITEM; - }>) => Promise; - clear: (context: Context, params: { currentWishlist: WISHLIST }) => Promise; - isInWishlist: (context: Context, params: { currentWishlist: WISHLIST; product: PRODUCT }) => boolean; -} - -/** - * @deprecated since version 1.0.0 - */ -export const useWishlistFactory = ( - factoryParams: UseWishlistFactoryParams, -) => { - const calculateWishlistTotal = (wishlists: Wishlist[]) => wishlists.reduce((prev, next) => prev + (next?.items_count ?? 0), 0); - - const useWishlist = (ssrKey = 'useWishlistFactory'): UseWishlist => { - const loading: Ref = sharedRef(false, `useWishlist-loading-${ssrKey}`); - const wishlist: Ref = sharedRef(null, `useWishlist-wishlist-${ssrKey}`); - const itemsCount: Ref = sharedRef(0, `useWishlist-itemsCount-${ssrKey}`); - const error: Ref = sharedRef({ - addItem: null, - removeItem: null, - load: null, - loadItemsCount: null, - clear: null, - }, `useWishlist-error-${ssrKey}`); - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle - const _factoryParams = configureFactoryParams( - factoryParams, - { - mainRef: wishlist, - alias: 'currentWishlist', - loading, - error, - }, - ); - - const setWishlist = (newWishlist: WISHLIST) => { - wishlist.value = newWishlist; - itemsCount.value = newWishlist[0].items_count; - Logger.debug(`useWishlistFactory/${ssrKey}/setWishlist`, newWishlist); - }; - - const addItem = async ({ product, customQuery }) => { - Logger.debug(`useWishlist/${ssrKey}/addItem`, product); - - try { - loading.value = true; - const updatedWishlist = await _factoryParams.addItem({ - currentWishlist: wishlist.value, - product, - customQuery, - }); - error.value.addItem = null; - wishlist.value = updatedWishlist; - itemsCount.value = updatedWishlist.items_count; - } catch (err) { - error.value.addItem = err; - Logger.error(`useWishlist/${ssrKey}/addItem`, err); - } finally { - loading.value = false; - } - }; - - const removeItem = async ({ product, customQuery }) => { - Logger.debug(`useWishlist/${ssrKey}/removeItem`, product); - - try { - loading.value = true; - const updatedWishlist = await _factoryParams.removeItem({ - currentWishlist: wishlist.value, - product, - customQuery, - }); - error.value.removeItem = null; - wishlist.value = updatedWishlist; - itemsCount.value = updatedWishlist.items_count; - } catch (err) { - error.value.removeItem = err; - Logger.error(`useWishlist/${ssrKey}/removeItem`, err); - } finally { - loading.value = false; - } - }; - - const load = async (params: { - searchParams?: Partial<{ - currentPage: number; - pageSize: number; - }>, - customQuery?: CustomQuery, - }) => { - Logger.debug(`useWishlist/${ssrKey}/load`); - try { - loading.value = true; - const loadedWishlist : WISHLIST = await _factoryParams.load(params); - wishlist.value = loadedWishlist; - itemsCount.value = calculateWishlistTotal([loadedWishlist]); - error.value.load = null; - } catch (err) { - error.value.load = err; - Logger.error(`useWishlist/${ssrKey}/load`, err); - } finally { - loading.value = false; - } - }; - - const loadItemsCount = async (params: { - customQuery?: CustomQuery - }) => { - Logger.debug(`useWishlist/${ssrKey}/loadItemsCount`); - try { - const loadedWishlist : WISHLIST = await _factoryParams.loadItemsCount(params); - itemsCount.value = calculateWishlistTotal([loadedWishlist]); - error.value.loadItemsCount = null; - } catch (err) { - error.value.loadItemsCount = err; - Logger.error(`useWishlist/${ssrKey}/loadItemsCount`, err); - } - }; - - const clear = async () => { - Logger.debug(`useWishlist/${ssrKey}/clear`); - - try { - loading.value = true; - const updatedWishlist = await _factoryParams.clear({ - currentWishlist: wishlist.value, - }); - error.value.clear = null; - wishlist.value = updatedWishlist; - itemsCount.value = 0; - } catch (err) { - error.value.clear = err; - Logger.error(`useWishlist/${ssrKey}/clear`, err); - } finally { - loading.value = false; - } - }; - - const isInWishlist = ({ product }) => { - Logger.debug(`useWishlist/${ssrKey}/isInWishlist`, product); - - return _factoryParams.isInWishlist({ - currentWishlist: wishlist.value, - product, - }); - }; - - return { - api: _factoryParams.api, - wishlist, - itemsCount, - isInWishlist, - addItem, - load, - loadItemsCount, - removeItem, - clear, - setWishlist, - loading, - error, - }; - }; - - return useWishlist; -}; diff --git a/packages/composables/src/getters/_utils.ts b/packages/composables/src/getters/_utils.ts deleted file mode 100644 index 2ac3c9851..000000000 --- a/packages/composables/src/getters/_utils.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { AgnosticAttribute } from '@vue-storefront/core'; -import { Product } from '@vue-storefront/magento-api'; - -export const getAttributeValue = (attribute) => attribute.values; - -export const formatAttributeList = (attributes): AgnosticAttribute[] => attributes.map((attr) => { - const attrValue = getAttributeValue(attr); - return { - name: attr.attribute_code, - value: attrValue, - label: attr.label, - }; -}); - -export const getVariantByAttributes = (products: Product[], attributes: any): Product => { - if (!products || products.length === 0) { - return null; - } - - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const configurationKeys = Object.keys(attributes); - - // @ts-ignore - return products[0].configurable_children.find((product) => configurationKeys - // @ts-ignore - .every((attrName) => product[attrName] && product[attrName] === attributes[attrName])) || products[0].configurable_children[0]; -}; diff --git a/packages/composables/src/getters/addressGetter.ts b/packages/composables/src/getters/addressGetter.ts deleted file mode 100644 index 7422ceb51..000000000 --- a/packages/composables/src/getters/addressGetter.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Countries, Country } from '@vue-storefront/magento-api'; -import { AddressGetter } from '../types'; - -const countriesList: AddressGetter['countriesList'] = (countries: Countries[]) => countries - .filter((c) => c.id && c.full_name_english && c.full_name_locale) - .map((c) => ({ - id: c.id, - label: c.full_name_locale, - englishLabel: c.full_name_english, - abbreviation: c.two_letter_abbreviation, - })) - .sort((a, b) => a.label.localeCompare(b.label)); - -const regionList: AddressGetter['regionList'] = (country: Country) => (country?.available_regions ? country.available_regions - .filter((c) => c.id && c.code && c.name) - .map((c) => ({ - id: c.id, - label: c.name, - abbreviation: c.code, - } as { - id: number; - label: string; - abbreviation: string; - })) - .sort((a, b) => a.label.localeCompare(b.label)) : []); - -export default { - countriesList, - regionList, -} as AddressGetter; diff --git a/packages/composables/src/getters/cartGetters.ts b/packages/composables/src/getters/cartGetters.ts deleted file mode 100644 index 9a7ae33b6..000000000 --- a/packages/composables/src/getters/cartGetters.ts +++ /dev/null @@ -1,208 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - CartGetters as CartGettersBase, - AgnosticPrice, - AgnosticTotals, - AgnosticAttribute, - AgnosticCoupon, - AgnosticDiscount, -} from '@vue-storefront/core'; -import { - Discount, - Cart, - CartItem, - Product, - SelectedShippingMethod, ConfigurableCartItem, ProductInterface, -} from '@vue-storefront/magento-api'; - -import productGetters from './productGetters'; -import { AgnosticPaymentMethod } from '../types'; - -export const getItems = (cart: Cart): CartItem[] => { - if (!cart || !cart.items) { - return []; - } - - return cart.items; -}; - -export const getItemName = (product: CartItem): string => productGetters.getName(product.product as Product); - -export const getSlug = (product: CartItem): string => productGetters.getSlug(product.product as Product); - -export const getItemImage = (product: CartItem): string => productGetters.getProductThumbnailImage(product.product as Product); - -export const getItemPrice = (product: CartItem): AgnosticPrice => { - if (!product || !product.prices) { - return { - regular: 0, - special: 0, - }; - } - if (product.prices) { - return { - regular: product.prices.row_total.value || 0, - special: product.prices.total_item_discount.value || 0, - }; - } - const regularPrice = product.product?.price_range?.minimum_price?.regular_price?.value; - const specialPrice = product.product?.price_range?.minimum_price?.final_price?.value; - - return { - regular: regularPrice || 0, - special: specialPrice || 0, - // @ts-ignore - credit: Math.round(specialPrice / 10), - installment: Math.round((specialPrice * 1.1046) / 10), - discountPercentage: 100 - Math.round((specialPrice / regularPrice) * 100), - total: product.prices?.row_total?.value, - }; -}; - -export const productHasSpecialPrice = (product: CartItem): boolean => getItemPrice(product).regular < getItemPrice(product).special; - -export const getItemQty = (product: CartItem): number => product.quantity; - -export const getItemAttributes = ( - { product }: CartItem & { product: Product }, - _filterByAttributeName?: Array, -): Record => { - const attributes = {}; - - if (!product || !product.configurable_options) { - return attributes; - } - - const configurableOptions = product.configurable_options; - - // eslint-disable-next-line no-restricted-syntax - for (const option of configurableOptions) { - attributes[option.attribute_code] = { - name: option.attribute_code, - label: option.label, - value: option.values.map((value) => { - const obj = {}; - obj[value.value_index] = value.label; - return obj; - }), - } as AgnosticAttribute; - } - return attributes; -}; - -export const getItemSku = (product: CartItem): string => product?.product?.sku || ''; - -const calculateDiscounts = (discounts: Discount[]): number => discounts.reduce((a, b) => Number.parseFloat(`${a}`) + Number.parseFloat(`${b.amount.value}`), 0); - -export const getTotals = (cart: Cart): AgnosticTotals => { - if (!cart || !cart.prices) return {} as AgnosticTotals; - - const subtotal = cart.prices.subtotal_including_tax.value; - return { - total: cart.prices.grand_total.value, - subtotal: cart.prices.subtotal_including_tax.value, - special: (cart.prices.discounts) ? subtotal - calculateDiscounts(cart.prices.discounts) : subtotal, - } as AgnosticTotals; -}; - -export const getShippingPrice = (cart: Cart): number => { - if (!cart.shipping_addresses) { - return 0; - } - - return cart.shipping_addresses - .reduce(( - acc, - shippingAddress, - ) => { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { selected_shipping_method } = shippingAddress; - - if (selected_shipping_method) { - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands - return acc + selected_shipping_method.amount.value; - } - - return acc; - }, 0); -}; - -export const getTotalItems = (cart: Cart): number => { - if (!cart) { - return 0; - } - return cart.total_quantity; -}; - -export const getConfiguredVariant = (product: ConfigurableCartItem): ProductInterface | null => product?.configured_variant || null; - -// eslint-disable-next-line import/no-named-as-default-member -export const getFormattedPrice = (price: number) => productGetters.getFormattedPrice(price); - -export const getCoupons = (cart: Cart): AgnosticCoupon[] => (Array.isArray(cart?.applied_coupons) ? cart.applied_coupons.map((c) => ({ - id: c.code, - name: c.code, - value: 0, - code: c.code, -} as AgnosticCoupon)) : []); - -export const getDiscounts = (cart: Cart): AgnosticDiscount[] => (Array.isArray(cart?.prices?.discounts) ? cart.prices.discounts.map((d) => ({ - id: d.label, - name: d.label, - description: '', - value: d.amount.value, - code: d.label, -} as AgnosticDiscount)) : []); - -export const getAppliedCoupon = (cart: Cart): AgnosticCoupon | null => (Array.isArray(cart?.applied_coupons) && cart?.applied_coupons.length > 0 ? { - id: cart.applied_coupons[0].code, - name: cart.applied_coupons[0].code, - value: 0, - code: cart.applied_coupons[0].code, -} : null); - -export const getSelectedShippingMethod = (cart: Cart): SelectedShippingMethod | null => (cart?.shipping_addresses?.length > 0 - ? cart?.shipping_addresses[0]?.selected_shipping_method - : null); - -export const getAvailablePaymentMethods = (cart: Cart): AgnosticPaymentMethod[] => cart?.available_payment_methods.map((p) => ({ - label: p.title, - value: p.code, -})); - -export const getStockStatus = (product: CartItem): string => product.product.stock_status; -export interface CartGetters extends CartGettersBase { - getAppliedCoupon(cart: Cart): AgnosticCoupon | null; - getAvailablePaymentMethods(cart: Cart): AgnosticPaymentMethod[]; - getSelectedShippingMethod(cart: Cart): SelectedShippingMethod | null; - productHasSpecialPrice(product: CartItem): boolean; - getStockStatus(product: CartItem): string; - getConfiguredVariant(product: ConfigurableCartItem): ProductInterface | null; -} - -const cartGetters: CartGetters = { - getAppliedCoupon, - getAvailablePaymentMethods, - getCoupons, - getDiscounts, - getFormattedPrice, - getItemAttributes, - getItemImage, - getItemName, - getSlug, - getItemPrice, - getItemQty, - getItems, - getItemSku, - getSelectedShippingMethod, - getShippingPrice, - getTotalItems, - getTotals, - productHasSpecialPrice, - getStockStatus, - getConfiguredVariant, -}; - -export default cartGetters; diff --git a/packages/composables/src/getters/categoryGetters.ts b/packages/composables/src/getters/categoryGetters.ts deleted file mode 100644 index 8d95164bf..000000000 --- a/packages/composables/src/getters/categoryGetters.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { CategoryGetters, AgnosticCategoryTree, AgnosticBreadcrumb } from '@vue-storefront/core'; -import { CategoryTree } from '@vue-storefront/magento-api'; -import { buildCategoryTree } from '../helpers/buildCategoryTree'; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getTree = (category: CategoryTree): AgnosticCategoryTree | null => { - if (!category) { - return null; - } - return buildCategoryTree(category, ''); -}; - -export const getCategoryTree = ( - category: CategoryTree, - currentCategory: string = '', - withProducts = false, -): AgnosticCategoryTree | null => ( - category - ? buildCategoryTree(category, currentCategory, withProducts) - : null -); - -export const getCategoryBreadcrumbs = (category: any): AgnosticBreadcrumb[] => { - let breadcrumbs = []; - - if (!category) { - return []; - } - - if (Array.isArray(category?.breadcrumbs)) { - breadcrumbs = category.breadcrumbs.map((breadcrumb) => ({ - text: breadcrumb.category_name, - link: `/c/${breadcrumb.category_url_path}${category.url_suffix || ''}`, - } as AgnosticBreadcrumb)); - } - - breadcrumbs.push({ - text: category.name, - link: `/c/${category.url_path}${category.url_suffix || ''}`, - } as AgnosticBreadcrumb); - - return breadcrumbs; -}; - -const categoryGetters: CategoryGetters = { - getTree, - getBreadcrumbs: getCategoryBreadcrumbs, - getCategoryTree, -}; - -export default categoryGetters; diff --git a/packages/composables/src/getters/checkoutGetters.ts b/packages/composables/src/getters/checkoutGetters.ts deleted file mode 100644 index b3945143c..000000000 --- a/packages/composables/src/getters/checkoutGetters.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { ShippingMethod } from '@vue-storefront/magento-api'; -import productGetters from './productGetters'; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getShippingMethodId = (shippingMethod: ShippingMethod): string => ''; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getShippingMethodName = (shippingMethod: ShippingMethod): string => ''; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getShippingMethodDescription = (shippingMethod: ShippingMethod): string => ''; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getShippingMethodPrice = (shippingMethod: ShippingMethod): number => 0; - -// eslint-disable-next-line import/no-named-as-default-member -export const getFormattedPrice = (price: number) => productGetters.getFormattedPrice(price); - -const checkoutGetters = { - getShippingMethodId, - getShippingMethodName, - getShippingMethodDescription, - getFormattedPrice, - getShippingMethodPrice, -}; - -export default checkoutGetters; diff --git a/packages/composables/src/getters/facetGetters.ts b/packages/composables/src/getters/facetGetters.ts deleted file mode 100644 index 7353e45ef..000000000 --- a/packages/composables/src/getters/facetGetters.ts +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - FacetsGetters, - AgnosticCategoryTree, - AgnosticGroupedFacet, - AgnosticPagination, - AgnosticSort, - AgnosticBreadcrumb, - AgnosticFacet, -} from '@vue-storefront/core'; - -import { - buildFacets, - reduceForGroupedFacets, - reduceForFacets, -} from '../composables/useFacet/_utils'; - -import { - SearchData, -} from '../types'; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getAll = (searchData: SearchData, criteria?: string[]): AgnosticFacet[] => buildFacets(searchData, reduceForFacets, criteria); - -const getGrouped = (searchData: SearchData, criteria?: string[]): AgnosticGroupedFacet[] => buildFacets(searchData, reduceForGroupedFacets, criteria) - ?.filter((facet) => facet.options && facet.options.length > 0); - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getSortOptions = (searchData): AgnosticSort => { - if (!searchData || !searchData.data || !searchData.data.availableSortingOptions) { - return { - options: [], - selected: '', - } as AgnosticSort; - } - - return { - options: searchData.data.availableSortingOptions, - selected: searchData.input.sort, - }; -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getCategoryTree = (searchData): AgnosticCategoryTree => { - const buildTree = (category: any): AgnosticCategoryTree => ({ - label: category.name, - slug: category.url_path, - items: (category.children) ? category.children.map((element) => buildTree(element)) : [], - isCurrent: (category.name === searchData.data.category.name), - }); - - if (!searchData.data || !searchData.data.category.children) { - return {} as AgnosticCategoryTree; - } - - return buildTree(searchData.data.category); -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getProducts = (searchData): any => { - if (!searchData || !searchData.data || !searchData.data.items) { - return []; - } - return searchData.data.items; -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getPagination = (searchData): AgnosticPagination => { - const totalPages = (searchData?.data) ? ( - Number.isNaN(Math.ceil(searchData.data.total / searchData.input.itemsPerPage)) - ? 1 - : Math.ceil(searchData.data.total / searchData.input.itemsPerPage) - ) : 1; - - return { - currentPage: (searchData?.input?.page > totalPages ? 1 : searchData?.input?.page) || 1, - totalPages, - totalItems: (searchData?.data?.total) ? searchData.data.total : 0, - itemsPerPage: searchData?.input?.itemsPerPage || 10, - pageOptions: [10, 50, 100], - }; -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getBreadcrumbs = (searchData): AgnosticBreadcrumb[] => []; - -const facetGetters: FacetsGetters = { - getSortOptions, - getGrouped, - getAll, - getProducts, - getCategoryTree, - getBreadcrumbs, - getPagination, -}; - -export default facetGetters; diff --git a/packages/composables/src/getters/forgotPasswordGetters.ts b/packages/composables/src/getters/forgotPasswordGetters.ts deleted file mode 100644 index 60e9376a3..000000000 --- a/packages/composables/src/getters/forgotPasswordGetters.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { ForgotPasswordGetters } from '@vue-storefront/core'; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -function getResetPasswordToken(result: any): string { - return ''; -} - -const isPasswordChanged = (result: any): boolean => result?.resetPassword; - -export const forgotPasswordGetters: ForgotPasswordGetters = { - getResetPasswordToken, - isPasswordChanged, -}; - -export default forgotPasswordGetters; diff --git a/packages/composables/src/getters/index.ts b/packages/composables/src/getters/index.ts deleted file mode 100644 index ad8e2e5a1..000000000 --- a/packages/composables/src/getters/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -export { default as addressGetter } from './addressGetter'; -export { default as cartGetters } from './cartGetters'; -export { default as categoryGetters } from './categoryGetters'; -export { default as checkoutGetters } from './checkoutGetters'; -export { default as facetGetters } from './facetGetters'; -export { default as forgotPasswordGetters } from './forgotPasswordGetters'; -export { default as orderGetters } from './orderGetters'; -export { default as productGetters } from './productGetters'; -export { default as reviewGetters } from './reviewGetters'; -export { default as storeGetters } from './storeGetters'; -export { default as userAddressesGetters } from './userAddressesGetters'; -export { default as userBillingGetters } from './userBillingGetters'; -export { default as userGetters } from './userGetters'; -export { default as userShippingGetters } from './userShippingGetters'; -export { default as wishlistGetters } from './wishlistGetters'; -export { default as storeConfigGetters } from './storeConfigGetters'; diff --git a/packages/composables/src/getters/orderGetters.ts b/packages/composables/src/getters/orderGetters.ts deleted file mode 100644 index a07c36c0a..000000000 --- a/packages/composables/src/getters/orderGetters.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { AgnosticPagination } from '@vue-storefront/core'; -import { CustomerOrder, OrderItemInterface } from '@vue-storefront/magento-api'; - -export const getDate = (order: CustomerOrder): string => new Date(order?.created_at).toLocaleDateString() || ''; - -export const getId = (order: CustomerOrder): string => String(Number.parseInt(order?.order_number, 10) || Math.floor(Math.random() * 100)); - -export const getStatus = (order: CustomerOrder): string => order?.status || 'Failed'; - -export const getPrice = (order: CustomerOrder): number | null => order?.grand_total || 0; - -export const getItems = (order: CustomerOrder): OrderItemInterface[] => order?.items || []; - -export const getItemSku = (item: OrderItemInterface): string => item?.product_sku || ''; - -export const getItemName = (item: OrderItemInterface): string => item?.product_name || ''; - -export const getItemQty = (item: OrderItemInterface): number => item?.quantity_ordered || 0; - -export const getItemPrice = (item: OrderItemInterface): number => item?.product_sale_price?.value || 0; - -export const getFormattedPrice = (price: number) => String(price); - -const getPagination = (orders: any): AgnosticPagination => ({ - currentPage: orders?.page_info?.current_page || 1, - totalPages: orders?.page_info?.total_pages || 1, - totalItems: orders?.total_count || 0, - itemsPerPage: orders?.page_info?.page_size || 10, - pageOptions: [10, 50, 100], -}); - -const orderGetters = { - getDate, - getId, - getStatus, - getPrice, - getItems, - getItemSku, - getItemName, - getItemQty, - getItemPrice, - getFormattedPrice, - getPagination, -}; - -export default orderGetters; diff --git a/packages/composables/src/getters/productGetters.ts b/packages/composables/src/getters/productGetters.ts deleted file mode 100644 index 89e1c38e7..000000000 --- a/packages/composables/src/getters/productGetters.ts +++ /dev/null @@ -1,295 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - AgnosticAttribute, - AgnosticBreadcrumb, - AgnosticMediaGalleryItem, - AgnosticPrice, - ProductGetters as ProductGettersBase, -} from '@vue-storefront/core'; -import { - BundleProduct, - Category, CategoryTree, GroupedProduct, - Product, -} from '@vue-storefront/magento-api'; - -import categoryGetters from './categoryGetters'; -import { htmlDecode } from '../helpers/htmlDecoder'; -import reviewGetters from './reviewGetters'; - -type ProductVariantFilters = any; - -export const getName = (product: Product): string => { - if (!product) { - return ''; - } - - return htmlDecode(product.name); -}; - -export const getSlug = (product: Product, category?: Category): string => { - const rewrites = product?.url_rewrites; - let url = product?.sku ? `/p/${product.sku}` : ''; - if (!rewrites || rewrites.length === 0) { - return url; - } - - url = `/${rewrites[0].url}`; - // eslint-disable-next-line no-restricted-syntax - for (const rewrite of rewrites) { - if (category && category.uid) { - url = `/${rewrite.url}`; - break; - } - } - - return url; -}; - -export const getPrice = (product: Product): AgnosticPrice => { - let regular = 0; - let special = null; - - if (product?.price_range) { - regular = product.price_range.minimum_price.regular_price.value; - const final = product.price_range.minimum_price.final_price.value; - - if (final < regular) { - special = final; - } - } - - return { - regular, - special, - }; -}; - -export const getGallery = (product: Product): AgnosticMediaGalleryItem[] => { - const images = []; - - if (!product?.media_gallery && !product?.configurable_product_options_selection?.media_gallery) { - return images; - } - - const selectedGallery = product.configurable_product_options_selection?.media_gallery - ? product.configurable_product_options_selection.media_gallery - : product.media_gallery; - - // eslint-disable-next-line no-restricted-syntax - for (const galleryItem of selectedGallery) { - images.push({ - small: galleryItem.url, - normal: galleryItem.url, - big: galleryItem.url, - }); - } - - return images; -}; - -export const getCoverImage = (product: Product): string => { - if (!product || !product.image) { - return null; - } - - return product.image.url; -}; - -export const getProductThumbnailImage = (product: Product): string => { - if (!product || !product.thumbnail) { - return null; - } - - return product.thumbnail.url; -}; - -export const getFiltered = (products: Product[], _filters: ProductVariantFilters | any = {}): Product[] => { - if (!products) { - return []; - } - - return products; -}; - -export const getAttributes = ( - products: Product, - _filterByAttributeName?: string[], -): Record => { - if (!products || !products?.configurable_options) { - return {}; - } - - const attributes = {}; - const configurableOptions = products.configurable_options; - - // eslint-disable-next-line no-restricted-syntax - for (const option of configurableOptions) { - attributes[option.attribute_code] = { - name: option.attribute_code, - label: option.label, - value: option.values.map((value) => { - const obj = {}; - obj[value.value_index] = value.label; - return obj; - }), - } as AgnosticAttribute; - } - return attributes; -}; - -export const getDescription = (product: Product): string => { - if (!product || !product?.description) { - return ''; - } - - return product.description.html; -}; - -export const getShortDescription = (product: Product): string => { - if (!product || !product.short_description) { - return ''; - } - return product.short_description.html; -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getCategoryIds = (product: Product): string[] => { - const categoryIds = []; - - if (!product?.categories) { - return categoryIds; - } - - return product.categories.map((category) => category.uid); -}; - -export const getCategory = (product: any, currentUrlPath: string): Category | null => { - if (!product?.categories || product?.categories.length === 0) { - return null; - } - - const categories = currentUrlPath.split('/'); - categories.pop(); - - if (categories.length === 0) { - return null; - } - - const categoryPath = categories.join('/'); - - // eslint-disable-next-line no-restricted-syntax - for (const category of product.categories) { - if (`/${category.url_path}` === categoryPath) { - return category; - } - } - - return null; -}; - -export const getId = (product: Product): string => product.uid; - -export const getProductSku = (product: Product): string => product.sku; - -// @ts-ignore -// eslint-disable-next-line no-underscore-dangle -export const getTypeId = (product: Product): string => product.__typename; - -export const getFormattedPrice = (price: number) => { - if (price === null) { - return null; - } - - const locale = 'en'; - const country = 'en'; - const currency = 'USD'; - - return new Intl.NumberFormat(`${locale}-${country}`, { - style: 'currency', - currency, - }).format(price); -}; - -export const getBreadcrumbs = (product: Product, category?: CategoryTree): AgnosticBreadcrumb[] => { - let breadcrumbs = []; - - if (!product) { - return breadcrumbs; - } - - if (category) { - breadcrumbs = categoryGetters.getBreadcrumbs(category); - } - - breadcrumbs.push({ - text: getName(product), - route: { - path: getSlug(product), - }, - }); - - return breadcrumbs; -}; - -export const { getTotalReviews } = reviewGetters; - -export const { getAverageRating } = reviewGetters; - -export const getProductRelatedProduct = (product: any): Product[] => product?.related_products || []; - -export const getProductUpsellProduct = (product: any): Product[] => product?.upsell_products || []; - -export const getSwatchData = (swatchData: Product['configurable_options'][0]['values'][0]['swatch_data']): string | undefined => swatchData?.value; - -const sortProduct = (a, b) => a.position - b.position; - -// eslint-disable-next-line no-underscore-dangle -export const getGroupedProducts = (product: GroupedProduct & { __typename: string }): GroupedProduct['items'] | undefined => product.__typename === 'GroupedProduct' && product?.items?.sort(sortProduct); - -// eslint-disable-next-line no-underscore-dangle -export const getBundleProducts = (product: BundleProduct & { __typename: string }): BundleProduct['items'] | undefined => product.__typename === 'BundleProduct' && product?.items?.sort(sortProduct); - -export interface ProductGetters extends ProductGettersBase{ - getCategory(product: Product, currentUrlPath: string): Category | null; - getProductRelatedProduct(product: Product): Product[]; - getProductSku(product: Product): string; - getProductThumbnailImage(product: Product): string; - getProductUpsellProduct(product: Product): Product[]; - getShortDescription(product: Product): string; - getSlug(product: Product, category?: Category): string; - getTypeId(product: Product): string; - getSwatchData(swatchData: Product['configurable_options'][0]['values'][0]['swatch_data']): string | undefined; - getGroupedProducts(product: GroupedProduct): GroupedProduct['items'] | undefined; - getBundleProducts(product: BundleProduct): BundleProduct['items'] | undefined; -} - -const productGetters: ProductGetters = { - getAttributes, - getAverageRating, - getBreadcrumbs, - getCategory, - getCategoryIds, - getCoverImage, - getDescription, - getFiltered, - getFormattedPrice, - getGallery, - getId, - getName, - getPrice, - getProductRelatedProduct, - getProductSku, - getProductThumbnailImage, - getProductUpsellProduct, - getShortDescription, - getSlug, - getTotalReviews, - getTypeId, - getSwatchData, - getGroupedProducts, - getBundleProducts, -}; - -export default productGetters; diff --git a/packages/composables/src/getters/reviewGetters.ts b/packages/composables/src/getters/reviewGetters.ts deleted file mode 100644 index 348e3d616..000000000 --- a/packages/composables/src/getters/reviewGetters.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { ReviewGetters, AgnosticRateCount } from '@vue-storefront/core'; -import { - ProductReview, - ProductReviewRatingMetadata, - ProductReviews, - ReviewMetadata, -} from '@vue-storefront/magento-api'; -import { AgnosticReviewMetadata } from '../types'; - -export const getItems = (review): ProductReview[] => review?.reviews?.items || []; - -export const getReviewId = (item: ProductReview): string => `${item.nickname}_${item.created_at}_${item.average_rating}`; - -export const getReviewAuthor = (item: ProductReview): string => item.nickname; - -export const getReviewMessage = (item: ProductReview): string => item.text; - -export const getReviewRating = (item: ProductReview): number => Number.parseInt( - item.ratings_breakdown.find((r) => r.name === 'Rating')?.value, - 10, -) || 0; - -export const getReviewDate = (item: ProductReview): string => item.created_at; - -export const getTotalReviews = (review: ProductReviews): number => review?.review_count || 0; - -export const getAverageRating = (review: ProductReviews): number => (review?.reviews?.items?.reduce((acc, curr) => Number.parseInt(`${acc}`, 10) + getReviewRating(curr as ProductReview), 0) ?? 0) / (review?.review_count || 1) || 0; - -export const getRatesCount = (_review: ProductReviews): AgnosticRateCount[] => []; - -export const getReviewsPage = (review: ProductReviews): number => review?.reviews.page_info?.page_size || 0; - -export const getReviewMetadata = (reviewData: ProductReviewRatingMetadata[]): AgnosticReviewMetadata[] => reviewData?.map((m) => ({ - ...m, - values: m.values.map((v) => ({ - label: (Number.parseInt(v.value, 10) || v.value), - id: v.value_id, - })), -})); - -export const getProductName = (review: ProductReview): string => review?.product?.name || ''; - -interface MagentoReviewGetters extends ReviewGetters { - getReviewMetadata(reviewData: ReviewMetadata[]): AgnosticReviewMetadata[]; - getProductName(reviewData: ProductReview): string; -} - -const reviewGetters: MagentoReviewGetters = { - getAverageRating, - getItems, - getRatesCount, - getReviewAuthor, - getReviewDate, - getReviewId, - getReviewMessage, - getReviewMetadata, - getReviewRating, - getReviewsPage, - getTotalReviews, - getProductName, -}; - -export default reviewGetters; diff --git a/packages/composables/src/getters/storeConfigGetters.ts b/packages/composables/src/getters/storeConfigGetters.ts deleted file mode 100644 index 85c24792a..000000000 --- a/packages/composables/src/getters/storeConfigGetters.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { StoreConfig } from '@vue-storefront/magento-api'; - -const getCode = (config: StoreConfig) => config.store_code; -const getTitle = (config: StoreConfig) => config.default_title; -const getName = (config: StoreConfig) => config.store_name; -const getCurrency = (config: StoreConfig) => config.default_display_currency_code; -const getLocale = (config: StoreConfig) => config.locale; -const allowGuestProductReview = (config: StoreConfig) => config.allow_guests_to_write_product_reviews; -const enabledWishlist = (config: StoreConfig) => config.magento_wishlist_general_is_enabled; -const getBaseMediaUrl = (config: StoreConfig) => config.base_media_url; -const getLogoSrc = (config: StoreConfig) => config.header_logo_src; -const getLogoWidth = (config: StoreConfig) => config.logo_width; -const getLogoHeight = (config: StoreConfig) => config.logo_height; -const getLogoAlt = (config: StoreConfig) => config.logo_alt; - -const storeConfigGetters = { - getCode, - getTitle, - getName, - getCurrency, - getLocale, - allowGuestProductReview, - enabledWishlist, - getBaseMediaUrl, - getLogoSrc, - getLogoWidth, - getLogoHeight, - getLogoAlt, -}; - -export default storeConfigGetters; diff --git a/packages/composables/src/getters/storeGetters.ts b/packages/composables/src/getters/storeGetters.ts deleted file mode 100644 index 279c3999b..000000000 --- a/packages/composables/src/getters/storeGetters.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { AvailableStores, StoreConfig } from '@vue-storefront/magento-api'; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -function getItems(stores: AvailableStores, criteria: any = {}): AvailableStores { - return stores; -} - -function getSelected(config: StoreConfig, store: StoreConfig): boolean { - return config.store_code === store.store_code; -} - -const storeGetters = { - getItems, - getSelected, -}; - -export default storeGetters; diff --git a/packages/composables/src/getters/userAddressesGetters.ts b/packages/composables/src/getters/userAddressesGetters.ts deleted file mode 100644 index 110344e71..000000000 --- a/packages/composables/src/getters/userAddressesGetters.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { UserAddressesGetters as BaseGetters } from '../types/getters'; -import { transformUserGetter } from '../helpers/userAddressManipulator'; - -interface UserAddressesGetters extends BaseGetters{ - getNeighborhood: (address: any) => string - getAddressExtra: (address: any) => string -} - -const userAddressesGetters: UserAddressesGetters = { - getAddresses: (addresses, criteria?: Record) => { - if (!addresses || addresses.length === 0 || !Array.isArray(addresses)) return []; - - const addressesData = addresses?.map((a) => transformUserGetter(a)) - ?.sort((a, b) => ((a.default_shipping === b.default_shipping) ? 0 : (a.default_shipping ? -1 : 1))) - ?.sort((a, b) => ((a.default_billing === b.default_billing) ? 0 : (a.default_billing ? -1 : 1))); - - if (!criteria || Object.keys(criteria).length === 0) { - return addressesData; - } - - const entries = Object.entries(criteria); - return addressesData.filter((address) => entries.every(([key, value]) => address[key] === value)); - }, - getDefault: (addresses) => addresses.find(({ isDefault }) => isDefault), - getTotal: (addresses) => addresses.length, - - getPostCode: (address) => address?.postcode || '', - getStreetName: (address) => (Array.isArray(address?.street) ? address?.street[0] : address?.street), - getStreetNumber: (address) => address?.streetNumber || '', - getCity: (address) => address?.city || '', - getFirstName: (address) => address?.firstname || '', - getLastName: (address) => address?.lastname || '', - getCountry: (address) => address?.country_code || '', - getPhone: (address) => address?.phone || '', - getEmail: (address) => address?.email || '', - getProvince: (address) => (address?.region?.region_code || address?.region?.region) || '', - getCompanyName: (address) => address?.company || '', - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getTaxNumber: (address) => address?.vat_id || '', - getId: (address) => address?.id || '', - getApartmentNumber: (address) => (Array.isArray(address?.street) ? address?.street[1] : address?.apartment), - getNeighborhood: (address) => (Array.isArray(address?.street) ? address?.street[2] : address?.neighborhood), - getAddressExtra: (address) => (Array.isArray(address?.street) ? address?.street[3] : address?.extra), - isDefault: (address) => (address?.default_shipping || address?.default_billing) || false, - isDefaultShipping: (address) => address?.default_shipping || false, - isDefaultBilling: (address) => address?.default_billing || false, -}; - -export default userAddressesGetters; diff --git a/packages/composables/src/getters/userBillingGetters.ts b/packages/composables/src/getters/userBillingGetters.ts deleted file mode 100644 index 21bfdbb0c..000000000 --- a/packages/composables/src/getters/userBillingGetters.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { UserBillingGetters as BaseGetters } from '@vue-storefront/core'; - -interface UserBillingGetters extends BaseGetters{ - getNeighborhood: (address: any) => string - getAddressExtra: (address: any) => string -} - -const userBillingGetters: UserBillingGetters = { - getAddresses: (billing, criteria?: Record) => { - if (!criteria || Object.keys(criteria).length === 0) { - return billing.addresses; - } - - const entries = Object.entries(criteria); - return billing.addresses.filter((address) => entries.every(([key, value]) => address[key] === value)); - }, - getDefault: (billing) => billing.addresses.find(({ isDefault }) => isDefault), - getTotal: (billing) => billing.addresses.length, - - getPostCode: (address) => address?.postcode || '', - getStreetName: (address) => (Array.isArray(address?.street) ? address?.street[0] : ''), - getStreetNumber: (address) => address?.streetNumber || '', - getCity: (address) => address?.city || '', - getFirstName: (address) => address?.firstname || '', - getLastName: (address) => address?.lastname || '', - getCountry: (address) => address?.country_code || '', - getPhone: (address) => address?.phone || '', - getEmail: (address) => address?.email || '', - getProvince: (address) => (address?.region?.region_code || address?.region?.region) || '', - getCompanyName: (address) => address?.company || '', - getNeighborhood: (address) => (Array.isArray(address?.street) ? address?.street[2] : address?.neighborhood), - getAddressExtra: (address) => (Array.isArray(address?.street) ? address?.street[3] : address?.extra), - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getTaxNumber: (address) => address.vat_id || '', - getId: (address) => address?.id || '', - getApartmentNumber: (address) => (Array.isArray(address?.street) ? address?.street[1] : ''), - isDefault: (address) => address?.default_billing || false, -}; - -export default userBillingGetters; diff --git a/packages/composables/src/getters/userGetters.ts b/packages/composables/src/getters/userGetters.ts deleted file mode 100644 index 2c4c52f96..000000000 --- a/packages/composables/src/getters/userGetters.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { UserGetters as BaseUserGetters } from '@vue-storefront/core'; -import { Customer } from '@vue-storefront/magento-api'; - -export const getFirstName = (user: Customer): string => (user ? user.firstname : ''); - -export const getLastName = (user: Customer): string => (user ? user.lastname : ''); - -export const getEmailAddress = (user: Customer): string => (user ? user.email : ''); - -export const getFullName = (user: Customer): string => (user ? `${user.firstname} ${user.lastname}` : ''); - -const userGetters: BaseUserGetters = { - getFirstName, - getLastName, - getEmailAddress, - getFullName, -}; - -export default userGetters; diff --git a/packages/composables/src/getters/userShippingGetters.ts b/packages/composables/src/getters/userShippingGetters.ts deleted file mode 100644 index b1c7c3798..000000000 --- a/packages/composables/src/getters/userShippingGetters.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { Logger, UserShippingGetters } from '@vue-storefront/core'; - -const userShippingGetters: UserShippingGetters = { - getAddresses: (shipping, criteria?: Record) => { - Logger.debug(shipping); - if (!shipping || !shipping.addresses) return [] as Record; - - if (!criteria || Object.keys(criteria).length === 0) { - return shipping.addresses; - } - - const entries = Object.entries(criteria); - return shipping.addresses.filter((address) => entries.every(([key, value]) => address[key] === value)); - }, - getDefault: (shipping) => shipping.addresses.find(({ isDefault }) => isDefault), - getTotal: (shipping) => shipping.addresses.length, - - getPostCode: (address) => address?.postcode || '', - getStreetName: (address) => (Array.isArray(address?.street) ? address?.street[0] : ''), - getStreetNumber: (address) => address?.streetNumber || '', - getCity: (address) => address?.city || '', - getFirstName: (address) => address?.firstname || '', - getLastName: (address) => address?.lastname || '', - getCountry: (address) => address?.country_code || '', - getPhone: (address) => address?.phone || '', - getEmail: (address) => address?.email || '', - getProvince: (address) => (address?.region?.region_code || address?.region?.region) || '', - getCompanyName: (address) => address?.company || '', - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getTaxNumber: (address) => '', - getId: (address) => address?.id || '', - getApartmentNumber: (address) => (Array.isArray(address?.street) ? address?.street[1] : ''), - isDefault: (address) => address?.default_shipping || false, -}; - -export default userShippingGetters; diff --git a/packages/composables/src/getters/wishlistGetters.ts b/packages/composables/src/getters/wishlistGetters.ts deleted file mode 100644 index f08b91371..000000000 --- a/packages/composables/src/getters/wishlistGetters.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { - WishlistGetters as BaseWishlistGetters, - AgnosticPrice, - AgnosticTotals, AgnosticPagination, -} from '@vue-storefront/core'; -import { - Wishlist, WishlistItemInterface, -} from '@vue-storefront/magento-api'; - -export type WishlistProduct = WishlistItemInterface; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const getItems = (wishlist: Wishlist): WishlistItemInterface[] => wishlist.items_v2.items; - -export const getItemName = (product: WishlistItemInterface): string => product?.product?.name || ''; - -export const getItemImage = (product: WishlistItemInterface): string => product?.product?.thumbnail.url || ''; - -export const getItemPrice = (product: WishlistItemInterface): AgnosticPrice => { - let regular = 0; - let special = null; - - if (product?.product?.price_range) { - regular = product?.product?.price_range.minimum_price.regular_price.value; - const final = product?.product?.price_range.minimum_price.final_price.value; - - if (final < regular) { - special = final; - } - } - - return { - regular, - special, - }; -}; - -export const getItemQty = (product: WishlistItemInterface): number => product.quantity; - -export const getItemAttributes = (_product: WishlistItemInterface, _filterByAttributeName?: string[]) => ({ '': '' }); - -export const getItemSku = (product: WishlistItemInterface): string => product?.product?.sku || ''; - -export const getTotals = (wishlist: Wishlist | Wishlist[]): AgnosticTotals => { - if (Array.isArray(wishlist)) { - return wishlist[0]?.items_v2?.items.reduce((acc, curr) => ({ - total: acc.total + getItemPrice(curr).special, - subtotal: acc.subtotal + getItemPrice(curr).regular, - }), ({ total: 0, subtotal: 0 })); - } - return wishlist?.items_v2?.items.reduce((acc, curr) => ({ - total: acc.total + getItemPrice(curr).special, - subtotal: acc.subtotal + getItemPrice(curr).regular, - }), ({ total: 0, subtotal: 0 })); -}; - -export const getShippingPrice = (_wishlist: Wishlist): number => 0; - -export const getTotalItems = (wishlist: Wishlist): number => (Array.isArray(wishlist) ? wishlist[0]?.items_count : (wishlist?.items_count || 0)); - -export const getFormattedPrice = (_price: number): string => ''; - -const getPagination = (wishlistData: Wishlist): AgnosticPagination => ({ - currentPage: wishlistData?.items_v2?.page_info?.current_page || 1, - totalPages: wishlistData?.items_v2?.page_info?.total_pages || 1, - totalItems: wishlistData?.items_count || 0, - itemsPerPage: wishlistData?.items_v2?.page_info?.page_size || 10, - pageOptions: [10, 50, 100], -}); - -const getProducts = (wishlistData: Wishlist[] | Wishlist): { - product: WishlistItemInterface; - quantity: number; - added_at: string; -}[] => { - if (!wishlistData || (Array.isArray(wishlistData) && wishlistData.length === 0)) { - return []; - } - const reducer = ( - acc, - curr: Wishlist, - ) => [...acc, ...curr?.items_v2?.items.map((item) => ({ - product: item.product, - quantity: item.quantity, - added_at: item.added_at, - id: item.id, - })) ?? []]; - - const mapper = (item: WishlistItemInterface) => ({ - product: item.product, - quantity: item.quantity, - added_at: item.added_at, - id: item.id, - }); - - return Array.isArray(wishlistData) - ? wishlistData.reduce((accumulator, element) => reducer(accumulator, element), []) - : wishlistData?.items_v2?.items.map((element) => mapper(element)); -}; - -export interface WishlistGetters extends BaseWishlistGetters { - getShippingPrice(wishlist: Wishlist): number; - - getItemQty(product: WishlistItemInterface): number; - - getPagination(wishlistData): AgnosticPagination; - - getProducts(wishlistData): { - product: WishlistItemInterface; - quantity: number; - added_at: string; - }[]; -} - -const wishlistGetters: WishlistGetters = { - getTotals, - getShippingPrice, - getItems, - getItemName, - getItemImage, - getItemPrice, - getItemQty, - getItemAttributes, - getItemSku, - getTotalItems, - getFormattedPrice, - getPagination, - getProducts, -}; - -export default wishlistGetters; diff --git a/packages/composables/src/helpers/buildCategoryTree.ts b/packages/composables/src/helpers/buildCategoryTree.ts deleted file mode 100644 index 1c67c8b79..000000000 --- a/packages/composables/src/helpers/buildCategoryTree.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { AgnosticCategoryTree } from '@vue-storefront/core'; -import { CategoryTree } from '@vue-storefront/magento-api'; -import { htmlDecode } from './htmlDecoder'; - -export const buildCategoryTree = (rootCategory: CategoryTree, currentCategory: string, withProducts = false): AgnosticCategoryTree => { - const hasChildren = Array.isArray(rootCategory.children) && rootCategory.children.length > 0; - const isCurrent = rootCategory.uid === currentCategory; - const label = htmlDecode(rootCategory.name); - const slug = `/${rootCategory.url_path}${rootCategory.url_suffix || ''}`; - - const childrenUid = hasChildren - ? rootCategory - .children - .reduce((acc, curr) => [...acc, curr.uid], []) - : []; - - const childProductCount = hasChildren - ? rootCategory - .children - .reduce((acc, curr) => acc + curr.product_count, 0) - : 0; - - const items = hasChildren - ? rootCategory - .children - .filter((c) => (withProducts ? c.product_count > 0 : true)) - .map((c) => buildCategoryTree(c, currentCategory)) - : []; - - return { - label, - slug, - uid: [rootCategory.uid, ...childrenUid], - items: items.filter((c) => c.count > 0), - count: childProductCount || rootCategory.product_count, - isCurrent, - }; -}; diff --git a/packages/composables/src/helpers/compareWishlist.ts b/packages/composables/src/helpers/compareWishlist.ts deleted file mode 100644 index fedb79c66..000000000 --- a/packages/composables/src/helpers/compareWishlist.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -export const compareWishlistProduct = ( - productA, - productB, -): boolean => { - const equalSku = productA?.sku === productB?.sku; - const equalUid = productA?.uid === productB?.uid; - - return equalSku && equalUid; -}; diff --git a/packages/composables/src/helpers/findItemOnWishlist.ts b/packages/composables/src/helpers/findItemOnWishlist.ts deleted file mode 100644 index a1b037688..000000000 --- a/packages/composables/src/helpers/findItemOnWishlist.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { compareWishlistProduct } from './compareWishlist'; - -export const findItemOnWishlist = (currentWishlist, product) => { - const wishlist = Array.isArray(currentWishlist) ? currentWishlist[0] : currentWishlist; - - return wishlist - ?.items_v2 - ?.items?.find((item) => compareWishlistProduct(item.product, product)); -}; diff --git a/packages/composables/src/helpers/htmlDecoder.ts b/packages/composables/src/helpers/htmlDecoder.ts deleted file mode 100644 index 7f6ee5622..000000000 --- a/packages/composables/src/helpers/htmlDecoder.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -export function htmlDecode(input: string) { - const formatName = () => { - try { - const domParser = new DOMParser(); - const doc = domParser.parseFromString(input, 'text/html'); - return doc.documentElement.textContent; - } catch { - return input; - } - }; - const name = formatName(); - return name === 'undefined' ? '' : name; -} diff --git a/packages/composables/src/helpers/userAddressManipulator.ts b/packages/composables/src/helpers/userAddressManipulator.ts deleted file mode 100644 index 1219dad16..000000000 --- a/packages/composables/src/helpers/userAddressManipulator.ts +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @deprecated since version 1.0.0 - */ -import { CustomerAddressInput } from '@vue-storefront/magento-api'; - -export const transformUserCreateAddressInput = (addressInputParams): CustomerAddressInput => { - const { - apartment, - neighborhood, - extra, - ...address - } = addressInputParams.address; - - const street = [address.street]; - - if (apartment) street.push(apartment); - - if (neighborhood) street.push(neighborhood); - - if (extra) street.push(extra); - - return { - ...address, - street, - }; -}; - -export const transformUserUpdateAddressInput = (addressInputParams): { - addressId: number; - input: CustomerAddressInput; -} => { - const { - apartment, - neighborhood, - extra, - id, - // @ts-ignore - // eslint-disable-next-line - extension_attributes, - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - __typename: typenameAddress, - ...address - } = addressInputParams.address; - - const { - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - __typename: typenameRegion, - ...region - } = address.region; - - const street = (Array.isArray(address.street) ? [...address.street] : [address.street]); - - if (apartment) street.push(apartment); - - if (neighborhood) street.push(neighborhood); - - if (extra) street.push(extra); - - const addressParams: CustomerAddressInput = { - ...address, - region, - street: street.filter(Boolean), - }; - - return { - addressId: id, - input: { - ...addressParams, - }, - }; -}; - -export const transformUserGetter = (addressInput) => ({ - ...addressInput, - street: addressInput.street[0], - apartment: addressInput.street[1], - neighborhood: addressInput.street[2], - extra: addressInput.street[3], -}); diff --git a/packages/composables/src/helpers/userDataGenerator.ts b/packages/composables/src/helpers/userDataGenerator.ts deleted file mode 100644 index d9446bd41..000000000 --- a/packages/composables/src/helpers/userDataGenerator.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { CustomerUpdateParameters } from '@vue-storefront/magento-api'; - -/** - * @deprecated - * @use packages/theme/helpers/customer/userDataGenerator.ts - */ -export const generateUserData = (userData): CustomerUpdateParameters => { - const baseData = { - email: userData.email, - firstname: userData.firstName || userData.firstname, - lastname: userData.lastName || userData.lastname, - } as CustomerUpdateParameters; - - if (Object.prototype.hasOwnProperty.call(userData, 'is_subscribed')) { - baseData.is_subscribed = userData.is_subscribed; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'dateOfBirth') || Object.prototype.hasOwnProperty.call(userData, 'date_of_birth')) { - baseData.date_of_birth = userData.dateOfBirth || userData.date_of_birth; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'gender')) { - baseData.gender = userData.gender; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'taxvat')) { - baseData.taxvat = userData.taxvat; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'prefix')) { - baseData.prefix = userData.prefix; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'suffix')) { - baseData.suffix = userData.suffix; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'password')) { - baseData.password = userData.password; - } - - if (Object.prototype.hasOwnProperty.call(userData, 'recaptchaToken')) { - baseData.recaptchaToken = userData.recaptchaToken; - } - - return baseData; -}; diff --git a/packages/composables/src/index.ts b/packages/composables/src/index.ts deleted file mode 100644 index 26126739d..000000000 --- a/packages/composables/src/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* istanbul ignore file */ -import { track } from '@vue-storefront/core'; - -track('VSFMagento'); - -export * from './getters'; - -export { default as useAddresses } from './composables/useAddresses'; -export { default as useBilling } from './composables/useBilling'; -export { default as useCart } from './composables/useCart'; -export { default as useCategory } from './composables/useCategory'; -export { default as useCategorySearch } from './composables/useCategorySearch'; -export { default as useConfig } from './composables/useConfig'; -export { default as useContent } from './composables/useContent'; -export { default as useCountrySearch } from './composables/useCountrySearch'; -export { default as useCurrency } from './composables/useCurrency'; -export { default as useCustomMutation } from './composables/useCustomMutation'; -export { default as useCustomQuery } from './composables/useCustomQuery'; -export { default as useExternalCheckout } from './composables/useExternalCheckout'; -export { default as useFacet } from './composables/useFacet'; -export { default as useForgotPassword } from './composables/useForgotPassword'; -export { default as useGetShippingMethods } from './composables/useGetShippingMethods'; -export { default as useGuestUser } from './composables/useGuestUser'; -export { default as useMakeOrder } from './composables/useMakeOrder'; -export { default as useNewsletter } from './composables/useNewsletter'; -export { default as usePaymentProvider } from './composables/usePaymentProvider'; -export { default as useProduct } from './composables/useProduct'; -export { default as useRelatedProducts } from './composables/useRelatedProducts'; -export { default as useReview } from './composables/useReview'; -export { default as useShipping } from './composables/useShipping'; -export { default as useShippingProvider } from './composables/useShippingProvider'; -export { default as useStore } from './composables/useStore'; -export { default as useUpsellProducts } from './composables/useUpsellProducts'; -export { default as useUrlResolver } from './composables/useUrlResolver'; -export { default as useUser } from './composables/useUser'; -export { default as useUserBilling } from './composables/useUserBilling'; -export { default as useUserOrder } from './composables/useUserOrder'; -export { default as useUserShipping } from './composables/useUserShipping'; -export { default as useWishlist } from './composables/useWishlist'; -export * from './dataTypes'; -export * from './types'; -export * from './types/getters'; -export * from './helpers/userAddressManipulator'; -export * from './helpers/htmlDecoder'; -export { - Countries, Discount, - SelectedShippingMethod, ConfigurableCartItem, ProductInterface, ProductReviewRatingMetadata, - ProductReviews, WishlistQuery, -} from '@vue-storefront/magento-api'; diff --git a/packages/composables/src/types/composables.ts b/packages/composables/src/types/composables.ts deleted file mode 100644 index 17e5d2b9d..000000000 --- a/packages/composables/src/types/composables.ts +++ /dev/null @@ -1,335 +0,0 @@ -import { - Composable, - ComposableFunctionArgs, - ComputedProperty, - CustomQuery, - PlatformApi, -} from '@vue-storefront/core'; -import { ComputedRef, Ref } from '@vue/composition-api'; -import { FetchPolicy } from './index'; - -export type CustomQueryParams = { customQuery?: CustomQuery; [k: string]: any }; - -export interface UseUrlResolver extends Composable { - search: (params: ComposableFunctionArgs<{ url: string }>) => Promise; - result: ComputedProperty; - error: ComputedProperty; - loading: ComputedProperty; -} - -export interface UseRouterErrors { - search: Error; -} - -export interface UseExternalCheckout extends Composable { - initializeCheckout: (params: ComposableFunctionArgs<{ baseUrl: string }>) => Promise; - error: ComputedProperty; - loading: ComputedProperty; -} - -export interface UseExternalCheckoutErrors { - initializeCheckout: Error; -} - -export interface UseCategorySearch extends Composable { - search: (params: ComposableFunctionArgs) => Promise; - result: ComputedProperty; - error: ComputedProperty; - loading: ComputedProperty; -} - -export interface UseCategorySearchErrors { - search: Error; -} - -export interface UseCountrySearch extends Composable { - load: (params?: ComposableFunctionArgs<{}>) => Promise; - search: (params: ComposableFunctionArgs<{ id: string }>) => Promise; - countries: ComputedProperty; - country: ComputedProperty; - error: ComputedProperty; - loading: ComputedProperty; -} - -export interface UseCountrySearchErrors { - load: Error; - search: Error; -} - -export interface UseConfig extends Composable { - config: ComputedRef; - loadConfig: (params?: ComposableFunctionArgs<{}>) => Promise; - loading: ComputedRef; -} - -export interface UseContentErrors { - content: Error; - blocks: Error; -} - -export interface UseContent extends Composable { - page: ComputedProperty; - blocks: ComputedProperty - loadContent: (params: ComposableFunctionArgs<{ identifier: string }>) => Promise; - loadBlocks: (params: ComposableFunctionArgs<{ identifiers: string[] }>) => Promise; - loading: ComputedProperty; - error: ComputedProperty; -} - -export interface UseGetShippingMethods extends Composable { - state: ComputedProperty; - - setState(state: SHIPPING_METHOD[]): void; - - load: (params: ComposableFunctionArgs<{ cartId: string }>) => Promise; - result: ComputedProperty; - error: ComputedProperty; - loading: ComputedProperty; -} - -export interface UseGetShippingMethodsErrors { - load: Error; -} - -export interface UsePaymentProviderErrors { - load: Error; - save: Error; -} - -export interface UsePaymentProvider extends Composable { - error: ComputedProperty; - loading: ComputedProperty; - state: ComputedProperty; - - setState(state: STATE): void; - - load(params?: ComposableFunctionArgs<{}>): Promise; - - save(params: ComposableFunctionArgs<{ paymentMethod: PAYMENT_METHOD }>): Promise; -} - -export interface UseGuestUserErrors { - attachToCart: Error; -} - -export interface UseGuestUserRegisterParams { - email: string; - password: string; - firstName?: string; - lastName?: string; - - [x: string]: any; -} - -export interface UseGuestUser extends Composable { - guestUser: ComputedProperty; - setGuestUser: (user: GUEST_USER) => void; - attachToCart: (params: ComposableFunctionArgs) => Promise; - loading: ComputedProperty; - error: ComputedProperty; -} - -export interface UseReviewErrors { - search: Error; - addReview: Error; - loadReviewMetadata: Error; - loadCustomerReviews: Error; -} - -export interface UseReview extends Composable { - search(params?: ComposableFunctionArgs): Promise; - - loadCustomerReviews(params?: ComposableFunctionArgs): Promise; - - addReview(params: ComposableFunctionArgs): Promise; - - loadReviewMetadata(params?: ComposableFunctionArgs<{}>): Promise; - - error: ComputedProperty; - reviews: ComputedProperty; - metadata: ComputedProperty; - loading: ComputedProperty; - - [x: string]: any; -} - -export interface UseNewsletterErrors { - updateSubscription: Error; -} - -export interface UseNewsletter extends Composable { - error: ComputedProperty; - loading: ComputedProperty; - updateSubscription: (params: ComposableFunctionArgs<{ email: UPDATE_NEWSLETTER_PARAMS }>) => Promise; -} - -export interface UseAddressesErrors { - load: Error; - save: Error; - remove: Error; - update: Error; -} - -export interface UseAddresses extends Composable { - error: ComputedProperty; - loading: ComputedProperty; - addresses: ComputedProperty; - load: (loadParams?: ComposableFunctionArgs) => Promise, - save: (saveParams: ComposableFunctionArgs) => Promise, - remove: (removeParams: ComposableFunctionArgs) => Promise, - update: (updateParams: ComposableFunctionArgs) => Promise, -} - -export interface UseForgotPasswordErrors { - request: Error; - setNew: Error; -} - -export interface UseForgotPassword { - result: ComputedProperty; - loading: ComputedProperty; - error: ComputedProperty; - - setNew(params: ComposableFunctionArgs<{ tokenValue: string, newPassword: string, email: string }>): Promise; - - request(params: ComposableFunctionArgs<{ email: string, recaptchaToken?: string }>): Promise; -} - -export interface UseRelatedProducts extends Composable { - products: ComputedProperty; - loading: ComputedProperty; - error: ComputedProperty; - - search(params: ComposableFunctionArgs): Promise; - - [x: string]: any; -} - -export interface UseRelatedProductsErrors { - search: Error; -} - -export interface UseUpsellProducts extends Composable { - products: ComputedProperty; - loading: ComputedProperty; - error: ComputedProperty; - - search(params: ComposableFunctionArgs): Promise; - - [x: string]: any; -} - -export interface UseUpsellProductsErrors { - search: Error; -} - -export interface UseCustomQuery extends Composable { - setQueryString: (newQueryString: string) => void; - queryString: ComputedProperty; - query: ({ - variables, - fetchPolicy, - }: { - variables: QUERY_VARIABLES, - fetchPolicy?: FetchPolicy, - // eslint-disable-next-line consistent-return - }) => Promise; - result: ComputedProperty; - loading: ComputedProperty; - error: ComputedProperty; - - [x: string]: any; -} - -export interface UseUpsellProductsErrors { - query: Error; -} - -export interface UseCustomMutation extends Composable { - setMutationString: (newMutationString: string) => void; - mutationString: ComputedProperty; - mutation: ({ - variables, - fetchPolicy, - }: { - variables: MUTATION_VARIABLES, - fetchPolicy?: Extract, - // eslint-disable-next-line consistent-return - }) => Promise; - result: ComputedProperty; - loading: ComputedProperty; - error: ComputedProperty; - - [x: string]: any; -} - -export interface UseUpsellProductsErrors { - query: Error; -} - -export interface UseStore extends Composable { - load: (params?: ComposableFunctionArgs<{}>) => Promise; - change: (params: ComposableFunctionArgs) => void; - stores: ComputedRef; - loading: ComputedRef; -} - -export interface UseStoreErrors { - stores: Error; -} - -export interface UseCurrency extends Composable { - load: (params?: ComposableFunctionArgs<{}>) => Promise; - change: (params: ComposableFunctionArgs<{ id: string }>) => void; - currencies: ComputedRef; - loading: ComputedRef; -} - -export interface UseWishlistErrors { - addItem: Error; - removeItem: Error; - load: Error; - loadItemsCount: Error; - clear: Error; -} - -export interface UseWishlist extends Composable { - wishlist: ComputedProperty; - loading: ComputedProperty; - itemsCount: Ref; - addItem(params: ComposableFunctionArgs<{ product: PRODUCT; }>): Promise; - - removeItem(params: ComposableFunctionArgs<{ product: WISHLIST_ITEM; }>): Promise; - - load(params: ComposableFunctionArgs<{ - searchParams?: Partial<{ - currentPage: number; - pageSize: number; - }>, - }>): Promise; - - loadItemsCount(params: ComposableFunctionArgs<{}>): Promise; - - clear(): Promise; - - setWishlist: (wishlist: WISHLIST) => void; - - isInWishlist({ product: PRODUCT }): boolean; - - error: ComputedProperty; -} diff --git a/packages/composables/src/types/getters.ts b/packages/composables/src/types/getters.ts deleted file mode 100644 index c57b7848c..000000000 --- a/packages/composables/src/types/getters.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface UserAddressesGetters { - getAddresses: (shipping: USER_ADDRESS, criteria?: Record) => USER_ADDRESS_ITEM[]; - getDefault: (shipping: USER_ADDRESS) => USER_ADDRESS_ITEM; - getTotal: (shipping: USER_ADDRESS) => number; - getPostCode: (address: USER_ADDRESS_ITEM) => string; - getStreetName: (address: USER_ADDRESS_ITEM) => string; - getStreetNumber: (address: USER_ADDRESS_ITEM) => string | number; - getCity: (address: USER_ADDRESS_ITEM) => string; - getFirstName: (address: USER_ADDRESS_ITEM) => string; - getLastName: (address: USER_ADDRESS_ITEM) => string; - getCountry: (address: USER_ADDRESS_ITEM) => string; - getPhone: (address: USER_ADDRESS_ITEM) => string; - getEmail: (address: USER_ADDRESS_ITEM) => string; - getProvince: (address: USER_ADDRESS_ITEM) => string; - getCompanyName: (address: USER_ADDRESS_ITEM) => string; - getTaxNumber: (address: USER_ADDRESS_ITEM) => string; - getId: (address: USER_ADDRESS_ITEM) => string | number; - getApartmentNumber: (address: USER_ADDRESS_ITEM) => string | number; - isDefault: (address: USER_ADDRESS_ITEM) => boolean; - isDefaultShipping: (address: USER_ADDRESS_ITEM) => boolean; - isDefaultBilling: (address: USER_ADDRESS_ITEM) => boolean; -} diff --git a/packages/composables/src/types/index.ts b/packages/composables/src/types/index.ts deleted file mode 100644 index 758a379ae..000000000 --- a/packages/composables/src/types/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { - FacetSearchResult, -} from '@vue-storefront/core'; -import { - Category, - Countries, - Country, - Product, -} from '@vue-storefront/magento-api'; - -export type Filter = Record; - -export interface FacetResultsData { - products: Product[]; - categories: Category[]; - facets: Record; - total: number; - perPageOptions: number[]; - itemsPerPage: number; - availableFilters: Record; -} - -export interface Breadcrumb { - text: string; - route: { - path: string; - }; -} - -export type SearchData = FacetSearchResult; - -export interface AddressGetter { - countriesList(countries: Countries[]): { - id: string; - label: string; - englishLabel: string; - abbreviation: string; - }[]; - - regionList(country: Country): { - id: number; - label: string; - abbreviation: string; - }[]; -} - -export interface AgnosticPaymentMethod { - label: string; - value: string; -} - -export interface AgnosticReviewMetadata { - id: string; - name: string; - values: { - label: string | number; - id: string; - }[]; -} - -export declare type FetchPolicy = 'cache-first' | 'network-only' | 'cache-only' | 'no-cache' | 'standby'; diff --git a/packages/composables/tsconfig.eslint.json b/packages/composables/tsconfig.eslint.json deleted file mode 100644 index a47730729..000000000 --- a/packages/composables/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "exclude": [ - "lib", - "node_modules" - ] -} diff --git a/packages/composables/tsconfig.json b/packages/composables/tsconfig.json deleted file mode 100644 index 343ba1c69..000000000 --- a/packages/composables/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib", - "rootDir": "./src", - "baseUrl": "./", - "lib": [ - "DOM" - ] - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "__tests__", - "lib", - "node_modules" - ], - "files": ["types/shims-graphql.d.ts"] -} diff --git a/packages/composables/types/shims-graphql.d.ts b/packages/composables/types/shims-graphql.d.ts deleted file mode 100644 index e3a7e6f94..000000000 --- a/packages/composables/types/shims-graphql.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable */ - -declare module '*.gql' { - import { DocumentNode } from 'graphql'; - const MyQuery: DocumentNode; - - export { MyQuery }; - - export default MyQuery; -} - -declare module '*.graphql' { - import { DocumentNode } from 'graphql'; - const MyQuery: DocumentNode; - - export { MyQuery }; - - export default MyQuery; -} diff --git a/packages/load-tests/package.json b/packages/load-tests/package.json index d3e21ba3f..afdd90a8f 100644 --- a/packages/load-tests/package.json +++ b/packages/load-tests/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/magento-load-tests", - "version": "1.0.2", + "version": "1.1.0", "description": "Load tests for Magento 2 - VSF integration", "main": "index.js", "repository": "https://github.com/vuestorefront/magento2", diff --git a/packages/theme/.env.example b/packages/theme/.env.example index a9f09937a..cb42a3b30 100644 --- a/packages/theme/.env.example +++ b/packages/theme/.env.example @@ -1,8 +1,11 @@ VSF_NUXT_APP_ENV=development VSF_NUXT_APP_PORT=3000 +VSF_NUXT_APP_HOST=localhost VSF_STORE_URL=https://localhost:3000 VSF_MIDDLEWARE_URL=https://localhost:3000/api/ +VSF_SSR_MIDDLEWARE_URL=http://localhost:3000/api/ + VSF_MAGENTO_BASE_URL={YOUR_SITE_FRONT_URL} VSF_MAGENTO_GRAPHQL_URL=https://{YOUR_SITE_FRONT_URL}/graphql @@ -28,4 +31,9 @@ VSF_RECAPTCHA_SIZE=invisible VSF_RECAPTCHA_MIN_SCORE=0.5 VSF_RECAPTCHA_VERSION=3 +VSF_COOKIE_HTTP_ONLY= +VSF_COOKIE_SECURE= +VSF_COOKIE_SAME_SITE= +VSF_COOKIE_PATH= + NODE_TLS_REJECT_UNAUTHORIZED=0 diff --git a/packages/theme/components/CartSidebar.vue b/packages/theme/components/CartSidebar.vue index aba184465..18c103a80 100644 --- a/packages/theme/components/CartSidebar.vue +++ b/packages/theme/components/CartSidebar.vue @@ -105,13 +105,7 @@ $fc(cartGetters.getItemPrice(product).special) : '' " - :link=" - localePath( - `/p/${product.product.original_sku}${cartGetters.getSlug( - product - )}` - ) - " + :link="localePath(getProductPath(product.product))" class="collected-product" @input="delayedUpdateItemQty({ product, quantity: $event })" @click:remove="sendToRemove({ product })" @@ -296,11 +290,13 @@ import { } from '@nuxtjs/composition-api'; import { debounce } from 'lodash-es'; import cartGetters from '~/modules/checkout/getters/cartGetters'; +import productGetters from '~/modules/catalog/product/getters/productGetters'; import { useUiState, useUiNotification, useExternalCheckout, useImage, + useProduct, } from '~/composables'; import { useCart } from '~/modules/checkout/composables/useCart'; import { useUser } from '~/modules/customer/composables/useUser'; @@ -333,6 +329,7 @@ export default defineComponent({ const { getMagentoImage, imageSizes } = useImage(); const router = useRouter(); const { app } = useContext(); + const { getProductPath } = useProduct(); const { cart, removeItem, @@ -364,7 +361,7 @@ export default defineComponent({ const tempProduct = ref(); onMounted(() => { - if (!cart.value.id) { + if (!cart.value?.id) { loadCart(); } }); @@ -423,12 +420,14 @@ export default defineComponent({ totals, totalItems, cartGetters, + productGetters, getAttributes, getBundles, isInStock, imageSizes, getMagentoImage, discount, + getProductPath, }; }, }); diff --git a/packages/theme/components/Header/SearchBar/SearchResults.vue b/packages/theme/components/Header/SearchBar/SearchResults.vue index 4fe179448..af766efbb 100644 --- a/packages/theme/components/Header/SearchBar/SearchResults.vue +++ b/packages/theme/components/Header/SearchBar/SearchResults.vue @@ -55,13 +55,7 @@ }" :alt="productGetters.getName(product)" :title="productGetters.getName(product)" - :link=" - localePath( - `/p/${productGetters.getProductSku( - product - )}${productGetters.getSlug(product, product.categories[0])}` - ) - " + :link="localePath(getProductPath(product))" :wishlist-icon="false" /> @@ -88,13 +82,7 @@ }" :alt="productGetters.getName(product)" :title="productGetters.getName(product)" - :link=" - localePath( - `/p/${productGetters.getProductSku( - product - )}${productGetters.getSlug(product, product.categories[0])}` - ) - " + :link="localePath(getProductPath(product))" :wishlist-icon="false" /> @@ -148,7 +136,7 @@ import { import { defineComponent } from '@nuxtjs/composition-api'; import type { PropType } from '@nuxtjs/composition-api'; import productGetters from '~/modules/catalog/product/getters/productGetters'; -import { useImage } from '~/composables'; +import { useImage, useProduct } from '~/composables'; import SvgImage from '~/components/General/SvgImage.vue'; import type { Product } from '~/modules/catalog/product/types'; @@ -174,11 +162,13 @@ export default defineComponent({ }, setup() { const { getMagentoImage, imageSizes } = useImage(); + const { getProductPath } = useProduct(); return { productGetters, getMagentoImage, imageSizes, + getProductPath, }; }, }); diff --git a/packages/theme/components/NewProducts.vue b/packages/theme/components/NewProducts.vue index 79f222af6..2a9c333b4 100644 --- a/packages/theme/components/NewProducts.vue +++ b/packages/theme/components/NewProducts.vue @@ -34,13 +34,7 @@ productGetters.getPrice(product).special && $fc(productGetters.getPrice(product).special) " - :link=" - localePath( - `/p/${productGetters.getProductSku( - product - )}${productGetters.getSlug(product, product.categories[0])}` - ) - " + :link="localePath(getProductPath(product))" :max-rating="5" :score-rating="productGetters.getAverageRating(product)" :reviews-count="productGetters.getTotalReviews(product)" @@ -65,7 +59,8 @@ import { computed, defineComponent, onMounted, ref, } from '@nuxtjs/composition-api'; import { - useImage, useProduct, + useImage, + useProduct, } from '~/composables'; import useWishlist from '~/modules/wishlist/composables/useWishlist'; import productGetters from '~/modules/catalog/product/getters/productGetters'; @@ -97,7 +92,11 @@ export default defineComponent({ }, setup() { const { isAuthenticated } = useUser(); - const { getProductList, loading } = useProduct(); + const { + getProductList, + loading, + getProductPath, + } = useProduct(); const { isInWishlist, addOrRemoveItem } = useWishlist(); const { addItemToCart, isInCart } = useAddToCart(); const products = ref([]); @@ -138,6 +137,7 @@ export default defineComponent({ productGetters, getMagentoImage, imageSizes, + getProductPath, }; }, }); diff --git a/packages/theme/composables/useImage/index.ts b/packages/theme/composables/useImage/index.ts index 2ea1f8ba0..aabd7498d 100644 --- a/packages/theme/composables/useImage/index.ts +++ b/packages/theme/composables/useImage/index.ts @@ -36,11 +36,13 @@ export function useImage(): UseImageInterface { /** * Extract image path from Magento URL. * - * @param fullImageUrl {string} + * @param fullImageUrl {string | null} * * @return {string} */ - const getMagentoImage = (fullImageUrl: string) => { + const getMagentoImage = (fullImageUrl: string | null) => { + if (!fullImageUrl) return ''; + // @ts-ignore const { imageProvider, magentoBaseUrl } = context.$vsf.$magento.config; diff --git a/packages/theme/composables/useUiHelpers/index.ts b/packages/theme/composables/useUiHelpers/index.ts index 79712d52e..4d879676d 100644 --- a/packages/theme/composables/useUiHelpers/index.ts +++ b/packages/theme/composables/useUiHelpers/index.ts @@ -72,7 +72,7 @@ export function useUiHelpers(): UseUiHelpersInterface { }; }; - const getCatLink = (category: CategoryTree): string => `/c/${category.url_path}${category.url_suffix || ''}`; + const getCatLink = (category: CategoryTree): string => `/${category.url_path}${category.url_suffix || ''}`; /** * Force push for a backward compatibility in other places, should be removed diff --git a/packages/theme/helpers/cart/addToCart.ts b/packages/theme/helpers/cart/addToCart.ts index aec08e0e8..253b2594c 100644 --- a/packages/theme/helpers/cart/addToCart.ts +++ b/packages/theme/helpers/cart/addToCart.ts @@ -1,7 +1,7 @@ import { useRouter, useContext } from '@nuxtjs/composition-api'; import type { Product } from '~/modules/catalog/product/types'; -import productGetters from '~/modules/catalog/product/getters/productGetters'; import useCart from '~/modules/checkout/composables/useCart'; +import { useProduct } from '~/modules/catalog/product/composables/useProduct'; export const useAddToCart = () => { const { @@ -10,6 +10,7 @@ export const useAddToCart = () => { } = useCart(); const router = useRouter(); const { app } = useContext(); + const { getProductPath } = useProduct(); const addItemToCart = async (params: { product: Product, quantity: number }) => { const { product, quantity } = params; // @ts-ignore @@ -26,16 +27,7 @@ export const useAddToCart = () => { case 'BundleProduct': case 'ConfigurableProduct': case 'GroupedProduct': - const sku = productGetters.getProductSku(product); - const slug = productGetters.getSlug(product).replace(/^\//, ''); // remove leading slash from getSlug - - const path = app.localeRoute({ - name: 'product', - params: { - id: sku, - slug, - }, - }); + const path = app.localeRoute(getProductPath(product)); await router.push(path); break; diff --git a/packages/theme/helpers/getMetaInfo.ts b/packages/theme/helpers/getMetaInfo.ts new file mode 100644 index 000000000..3816aa5cc --- /dev/null +++ b/packages/theme/helpers/getMetaInfo.ts @@ -0,0 +1,37 @@ +import type { MetaInfo } from 'vue-meta'; + +export const getMetaInfo = (page: any, isNoIndex: boolean = false): MetaInfo => { + if (!page) { + return null; + } + + const seoTags: MetaInfo = { + meta: [], + }; + + if (page?.meta_title || page?.title || page?.name) { + seoTags.title = page?.meta_title || page?.title || page?.name; + } + if (page?.meta_description) { + seoTags.meta.push({ + hid: 'description', + name: 'description', + content: page.meta_description, + }); + } + if (page?.meta_keyword || page?.meta_keywords) { + seoTags.meta.push({ + hid: 'keywords', + name: 'keywords', + content: page?.meta_keyword || page?.meta_keywords, + }); + } + if (isNoIndex) { + seoTags.meta.push({ + name: 'robots', + content: 'noindex, nofollow', + }); + } + + return seoTags; +}; diff --git a/packages/theme/lang/de.js b/packages/theme/lang/de.js index 720cbb614..47e159ecb 100644 --- a/packages/theme/lang/de.js +++ b/packages/theme/lang/de.js @@ -305,4 +305,6 @@ export default { "Payment date":"Zahlungsdatum", "The user password was changed successfully updated!":"Das Benutzerpasswort wurde erfolgreich geΓ€ndert aktualisiert!", "The user account data was successfully updated!":"Die Benutzerkontodaten wurden erfolgreich aktualisiert!", + "You submitted your review for moderation.": "Sie haben Ihre Bewertung zur Moderation eingereicht.", + "Starting at": "Beginnt um", }; diff --git a/packages/theme/lang/en.js b/packages/theme/lang/en.js index 2125ab4a0..81708eec4 100644 --- a/packages/theme/lang/en.js +++ b/packages/theme/lang/en.js @@ -303,4 +303,6 @@ export default { "Payment date":"Payment date", "The user password was changed successfully updated!":"The user password was changed successfully updated!", "The user account data was successfully updated!":"The user account data was successfully updated!", + "You submitted your review for moderation.": "You submitted your review for moderation.", + "Starting at": "Starting at", }; diff --git a/packages/theme/middleware.config.js b/packages/theme/middleware.config.js index db33334e1..d9bad1390 100755 --- a/packages/theme/middleware.config.js +++ b/packages/theme/middleware.config.js @@ -29,10 +29,10 @@ module.exports = { ...cookieNames, }, cookiesDefaultOpts: { - httpOnly: false, - secure: true, - sameSite: 'Strict', - path: '/', + httpOnly: process.env.VSF_COOKIE_HTTP_ONLY || false, + secure: process.env.VSF_COOKIE_SECURE || false, + sameSite: process.env.VSF_COOKIE_SAME_SITE || 'Strict', + path: process.env.VSF_COOKIE_PATH || '/', }, defaultStore: 'default', externalCheckout: { diff --git a/packages/theme/middleware/__tests__/url-resolver.spec.js b/packages/theme/middleware/__tests__/url-resolver.spec.js new file mode 100644 index 000000000..8d803861e --- /dev/null +++ b/packages/theme/middleware/__tests__/url-resolver.spec.js @@ -0,0 +1,88 @@ +import { createPinia, setActivePinia } from 'pinia'; +import { usePageStore } from '~/stores/page'; +import urlResolverMiddleware from '../url-resolver'; + +const errRes = { + data: undefined, + errors: [ + { + message: 'Variable "$url" of required type "String!" was not provided.', + extensions: { + category: 'graphql', + }, + }, + ], +}; + +const emptyRes = { + data: { + route: null, + }, + errors: undefined, +}; + +const validRes = { + data: { + route: { + type: 'CATEGORY', + uid: 'MjEzMA==', + }, + }, + errors: undefined, +}; + +const contextMockFactory = (callbackResponse) => ({ + app: { + $vsf: { + $magento: { + api: { + route: () => callbackResponse, + }, + }, + }, + }, + route: { + path: '/default/set-of-sprite-yoga-straps.html', + }, + i18n: { + locale: 'default', + }, + error: jest.fn(), +}); + +describe('Url resolver middleware', () => { + beforeEach(() => { + jest.resetAllMocks(); + setActivePinia(createPinia()); + }); + + it('should redirect to 404 if response data is null', async () => { + const contextMock = contextMockFactory(emptyRes); + const pageStore = usePageStore(); + + await urlResolverMiddleware(contextMock); + + expect(pageStore.routeData).toBe(null); + expect(contextMock.error).toHaveBeenCalled(); + }); + + it('should redirect to 404 if response is error', async () => { + const contextMock = contextMockFactory(errRes); + const pageStore = usePageStore(); + + await urlResolverMiddleware(contextMock); + + expect(pageStore.routeData).toBe(null); + expect(contextMock.error).toHaveBeenCalled(); + }); + + it('should set a route data if response is data', async () => { + const contextMock = contextMockFactory(validRes); + const pageStore = usePageStore(); + + await urlResolverMiddleware(contextMock); + + expect(typeof pageStore.routeData).toBe('object'); + expect(contextMock.error).toHaveBeenCalledTimes(0); + }); +}); diff --git a/packages/theme/middleware/url-resolver.ts b/packages/theme/middleware/url-resolver.ts new file mode 100644 index 000000000..7d1560c28 --- /dev/null +++ b/packages/theme/middleware/url-resolver.ts @@ -0,0 +1,27 @@ +import { Middleware } from '@nuxt/types'; +import { usePageStore } from '~/stores/page'; +import { Logger } from '~/helpers/logger'; +import { RoutableInterface } from '~/modules/GraphQL/types'; + +const urlResolverMiddleware : Middleware = async (context) => { + const pageStore = usePageStore(); + const { path } = context.route; + + const clearUrl = path.replace(/[a-z]+\/[cp|]\//gi, '').replace(`/${context.i18n.locale}`, ''); + + Logger.debug('middleware/url-resolver', clearUrl); + + const { data, errors } = await context.app.$vsf.$magento.api.route(clearUrl); + + Logger.debug('middleware/url-resolver/result', { data, errors }); + + const results: RoutableInterface | null = data?.route ?? null; + + if (!results || errors?.length) context.error({ statusCode: 404 }); + + pageStore.$patch((state) => { + state.routeData = results; + }); +}; + +export default urlResolverMiddleware; diff --git a/packages/theme/modules/GraphQL/types.ts b/packages/theme/modules/GraphQL/types.ts index 66dfe76ce..33c1c7db6 100644 --- a/packages/theme/modules/GraphQL/types.ts +++ b/packages/theme/modules/GraphQL/types.ts @@ -5344,6 +5344,9 @@ export interface RoutableInterface { relative_url?: Maybe; /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ type?: Maybe; + sku?: Maybe; + uid?: Maybe; + identifier?: Maybe; } /** Comment item details */ export interface SalesCommentItem { diff --git a/packages/theme/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts b/packages/theme/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts index 89467f714..f45cd4cdb 100644 --- a/packages/theme/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts +++ b/packages/theme/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts @@ -26,7 +26,7 @@ jest.mock('~/modules/catalog/category/helpers/useTraverseCategory'); }); (useUiHelpers as jest.Mock).mockReturnValue({ getCatLink: jest.fn( - (category: CategoryTree): string => `/c/${category.url_path}${category.url_suffix || ''}`, + (category: CategoryTree): string => `/${category.url_path}${category.url_suffix || ''}`, ), }); diff --git a/packages/theme/modules/catalog/category/components/views/__tests__/productsMock.ts b/packages/theme/modules/catalog/category/components/views/__tests__/productsMock.ts index 480812293..40e068b2a 100644 --- a/packages/theme/modules/catalog/category/components/views/__tests__/productsMock.ts +++ b/packages/theme/modules/catalog/category/components/views/__tests__/productsMock.ts @@ -21,7 +21,7 @@ export const productsMock = [ review_count: 0, reviews: { __typename: 'ProductReviews', items: [] }, commonProps: { - title: 'Set of Sprite Yoga Straps', link: '/default/p/24-WG085_Group/set-of-sprite-yoga-straps.html', style: { '--index': 0 }, isAddedToCart: false, image: 'media/catalog/product/l/u/luma-yoga-strap-set.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$14.00', specialPrice: null, reviewsCount: 0, scoreRating: 0, + title: 'Set of Sprite Yoga Straps', link: '/default/set-of-sprite-yoga-straps.html', style: { '--index': 0 }, isAddedToCart: false, image: 'media/catalog/product/l/u/luma-yoga-strap-set.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$14.00', specialPrice: null, reviewsCount: 0, scoreRating: 0, }, }, { __typename: 'BundleProduct', @@ -45,7 +45,7 @@ export const productsMock = [ review_count: 0, reviews: { __typename: 'ProductReviews', items: [] }, commonProps: { - title: 'Sprite Yoga Companion Kit', link: '/default/p/24-WG080/sprite-yoga-companion-kit.html', style: { '--index': 1 }, isAddedToCart: false, image: 'media/catalog/product/l/u/luma-yoga-kit-2.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$61.00', specialPrice: null, reviewsCount: 0, scoreRating: 0, + title: 'Sprite Yoga Companion Kit', link: '/default/sprite-yoga-companion-kit.html', style: { '--index': 1 }, isAddedToCart: false, image: 'media/catalog/product/l/u/luma-yoga-kit-2.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$61.00', specialPrice: null, reviewsCount: 0, scoreRating: 0, }, }, { __typename: 'SimpleProduct', @@ -73,7 +73,7 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 100, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '5' }] }, { __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }] }, commonProps: { - title: 'Didi Sport Watch', link: '/default/p/24-WG02/didi-sport-watch.html', style: { '--index': 2 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg02-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$92.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.666_666_666_666_666_5, + title: 'Didi Sport Watch', link: '/default/didi-sport-watch.html', style: { '--index': 2 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg02-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$92.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.666_666_666_666_666_5, }, }, { __typename: 'SimpleProduct', @@ -97,7 +97,7 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }] }, commonProps: { - title: 'Clamber Watch', link: '/default/p/24-WG03/clamber-watch.html', style: { '--index': 3 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg03-gr-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$54.00', specialPrice: null, reviewsCount: 3, scoreRating: 2.666_666_666_666_666_5, + title: 'Clamber Watch', link: '/default/clamber-watch.html', style: { '--index': 3 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg03-gr-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$54.00', specialPrice: null, reviewsCount: 3, scoreRating: 2.666_666_666_666_666_5, }, }, { __typename: 'SimpleProduct', @@ -121,7 +121,7 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }] }, commonProps: { - title: 'Bolo Sport Watch', link: '/default/p/24-WG01/bolo-sport-watch.html', style: { '--index': 4 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg01-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$49.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.333_333_333_333_333_5, + title: 'Bolo Sport Watch', link: '/default/bolo-sport-watch.html', style: { '--index': 4 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg01-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$49.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.333_333_333_333_333_5, }, }, { __typename: 'SimpleProduct', @@ -145,7 +145,7 @@ export const productsMock = [ review_count: 2, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }] }, commonProps: { - title: 'Luma Analog Watch', link: '/default/p/24-WG09/luma-analog-watch.html', style: { '--index': 5 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg09-gr-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$43.00', specialPrice: null, reviewsCount: 2, scoreRating: 4, + title: 'Luma Analog Watch', link: '/default/luma-analog-watch.html', style: { '--index': 5 }, isAddedToCart: false, image: 'media/catalog/product/w/g/wg09-gr-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$43.00', specialPrice: null, reviewsCount: 2, scoreRating: 4, }, }, { __typename: 'SimpleProduct', @@ -173,7 +173,7 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }] }, commonProps: { - title: 'Dash Digital Watch', link: '/default/p/24-MG02/dash-digital-watch.html', style: { '--index': 6 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg02-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$92.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.666_666_666_666_666_5, + title: 'Dash Digital Watch', link: '/default/dash-digital-watch.html', style: { '--index': 6 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg02-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$92.00', specialPrice: null, reviewsCount: 3, scoreRating: 3.666_666_666_666_666_5, }, }, { __typename: 'SimpleProduct', @@ -201,7 +201,7 @@ export const productsMock = [ review_count: 4, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 100, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '5' }] }, { __typename: 'ProductReview', average_rating: 80, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '4' }] }, { __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }, { __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }] }, commonProps: { - title: 'Cruise Dual Analog Watch', link: '/default/p/24-MG05/cruise-dual-analog-watch.html', style: { '--index': 7 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg05-br-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$55.00', specialPrice: null, reviewsCount: 4, scoreRating: 3.25, + title: 'Cruise Dual Analog Watch', link: '/default/cruise-dual-analog-watch.html', style: { '--index': 7 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg05-br-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$55.00', specialPrice: null, reviewsCount: 4, scoreRating: 3.25, }, }, { __typename: 'SimpleProduct', @@ -229,7 +229,7 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }, { __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }, { __typename: 'ProductReview', average_rating: 40, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '2' }] }] }, commonProps: { - title: 'Summit Watch', link: '/default/p/24-MG03/summit-watch.html', style: { '--index': 8 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg03-br-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$54.00', specialPrice: null, reviewsCount: 3, scoreRating: 2.333_333_333_333_333_5, + title: 'Summit Watch', link: '/default/summit-watch.html', style: { '--index': 8 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg03-br-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$54.00', specialPrice: null, reviewsCount: 3, scoreRating: 2.333_333_333_333_333_5, }, }, { __typename: 'SimpleProduct', @@ -253,6 +253,6 @@ export const productsMock = [ review_count: 3, reviews: { __typename: 'ProductReviews', items: [{ __typename: 'ProductReview', average_rating: 100, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '5' }] }, { __typename: 'ProductReview', average_rating: 100, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '5' }] }, { __typename: 'ProductReview', average_rating: 60, ratings_breakdown: [{ __typename: 'ProductReviewRating', name: 'Rating', value: '3' }] }] }, commonProps: { - title: 'Endurance Watch', link: '/default/p/24-MG01/endurance-watch.html', style: { '--index': 9 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg01-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$49.00', specialPrice: null, reviewsCount: 3, scoreRating: 4.333_333_333_333_333, + title: 'Endurance Watch', link: '/default/endurance-watch.html', style: { '--index': 9 }, isAddedToCart: false, image: 'media/catalog/product/m/g/mg01-bk-0.jpg', imageTag: 'nuxt-img', nuxtImgConfig: { fit: 'cover' }, isInWishlist: false, isInWishlistIcon: 'heart_fill', wishlistIcon: 'heart', regularPrice: '$49.00', specialPrice: null, reviewsCount: 3, scoreRating: 4.333_333_333_333_333, }, }]; diff --git a/packages/theme/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts b/packages/theme/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts index 7668c705f..c591b79d5 100644 --- a/packages/theme/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts +++ b/packages/theme/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts @@ -4,8 +4,9 @@ import type { ImageModifiers } from '@nuxt/image'; import { useImage } from '~/composables'; import { useUser } from '~/modules/customer/composables/useUser'; import { useWishlist } from '~/modules/wishlist/composables/useWishlist'; +import { useProduct } from '~/modules/catalog/product/composables/useProduct'; import { - getName, getPrice, getProductSku, getProductThumbnailImage, getSlug, + getName, getPrice, getProductThumbnailImage, } from '~/modules/catalog/product/getters/productGetters'; import { getAverageRating, getTotalReviews } from '~/modules/review/getters/reviewGetters'; import { useAddToCart } from '~/helpers/cart/addToCart'; @@ -40,6 +41,7 @@ export const useProductsWithCommonProductCardProps = (products: Ref) const { isInWishlist } = useWishlist(); const { isAuthenticated } = useUser(); const { isInCart } = useAddToCart(); + const { getProductPath } = useProduct(); const context = useContext(); /** @@ -74,7 +76,7 @@ export const useProductsWithCommonProductCardProps = (products: Ref) scoreRating: getAverageRating(product), }; - const link = context.localeRoute({ name: 'product', params: { id: getProductSku(product), slug: getSlug(product).slice(1) } }); + const link = context.localeRoute(getProductPath(product)); const commonProps = { title: getName(product), diff --git a/packages/theme/modules/catalog/category/composables/useCategory/categoryMeta.gql.ts b/packages/theme/modules/catalog/category/composables/useCategory/categoryMeta.gql.ts new file mode 100644 index 000000000..f51ec2764 --- /dev/null +++ b/packages/theme/modules/catalog/category/composables/useCategory/categoryMeta.gql.ts @@ -0,0 +1,12 @@ +export default ` + query categoryMeta($filters: CategoryFilterInput) { + categories(filters: $filters) { + items { + meta_title + meta_description + meta_keywords + name + } + } + } +`; diff --git a/packages/theme/modules/catalog/category/composables/useCategory/index.ts b/packages/theme/modules/catalog/category/composables/useCategory/index.ts index 6500e50cb..1f0f80f83 100644 --- a/packages/theme/modules/catalog/category/composables/useCategory/index.ts +++ b/packages/theme/modules/catalog/category/composables/useCategory/index.ts @@ -1,10 +1,12 @@ import { Ref, ref, useContext } from '@nuxtjs/composition-api'; import { Logger } from '~/helpers/logger'; import type{ CategoryTree } from '~/modules/GraphQL/types'; +import categoryMetaGql from '~/modules/catalog/category/composables/useCategory/categoryMeta.gql'; import type { UseCategoryErrors, UseCategoryInterface, UseCategoryParamsInput, + UseCategoryMetaParamsInput, } from './useCategory'; /** @@ -72,6 +74,7 @@ export function useCategory(): UseCategoryInterface { const loading: Ref = ref(false); const error: Ref = ref({ load: null, + loadCategoryMeta: null, }); const categories: Ref> = ref(null); @@ -82,7 +85,7 @@ export function useCategory(): UseCategoryInterface { loading.value = true; const { data } = await app.context.$vsf.$magento.api.categoryList(params, params?.customQuery ?? null); Logger.debug('[Result]:', { data }); - categories.value = data.categories.items; + categories.value = data?.categories?.items ?? []; error.value.load = null; } catch (err) { error.value.load = err; @@ -92,8 +95,39 @@ export function useCategory(): UseCategoryInterface { } }; + const loadCategoryMeta = async (params: UseCategoryMetaParamsInput): Promise => { + Logger.debug('useCategory/loadCategoryMeta', params); + let categoryMeta = null; + + try { + loading.value = true; + + const { data } = await app.context.$vsf.$magento.api.customQuery({ + query: categoryMetaGql, + queryVariables: { + filters: { + category_uid: { + eq: params.category_uid, + }, + }, + }, + }); + Logger.debug('[Result]:', { data }); + categoryMeta = data.categoryList?.[0] || null; + error.value.loadCategoryMeta = null; + } catch (err) { + error.value.loadCategoryMeta = err; + Logger.error('useCategory/loadCategoryMeta', err); + } finally { + loading.value = false; + } + + return categoryMeta; + }; + return { load, + loadCategoryMeta, loading, error, categories, diff --git a/packages/theme/modules/catalog/category/composables/useCategory/useCategory.ts b/packages/theme/modules/catalog/category/composables/useCategory/useCategory.ts index ba546186b..afd558c23 100644 --- a/packages/theme/modules/catalog/category/composables/useCategory/useCategory.ts +++ b/packages/theme/modules/catalog/category/composables/useCategory/useCategory.ts @@ -34,6 +34,7 @@ import type{ CategoryTree } from '~/modules/GraphQL/types'; export interface UseCategoryErrors { /** Error when loading categories fails, otherwise is `null`. */ load: Error; + loadCategoryMeta: Error; } /** The {@link useCategory} params object received by `load` function. */ @@ -41,6 +42,11 @@ export type UseCategoryParamsInput = ComposableFunctionArgs< { pageSize: number; }>; +/** The {@link useCategory} params object received by `loadCategoryMeta` function. */ +export type UseCategoryMetaParamsInput = ComposableFunctionArgs< { + category_uid: string; +}>; + /** * Data and methods returned from the {@link useCategory} composable * */ @@ -87,4 +93,5 @@ export interface UseCategoryInterface { * ``` */ load(params: ComposableFunctionArgs): Promise; + loadCategoryMeta(params: ComposableFunctionArgs): Promise; } diff --git a/packages/theme/modules/catalog/category/composables/useFacet/getFacetData.gql.ts b/packages/theme/modules/catalog/category/composables/useFacet/getFacetData.gql.ts index 41073bdf8..e71126a54 100644 --- a/packages/theme/modules/catalog/category/composables/useFacet/getFacetData.gql.ts +++ b/packages/theme/modules/catalog/category/composables/useFacet/getFacetData.gql.ts @@ -44,6 +44,13 @@ export default ` } } } + ... on GroupedProduct { + items { + product { + sku + } + } + } } page_info { current_page diff --git a/packages/theme/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts b/packages/theme/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts index ea9699f9a..580bbf73f 100644 --- a/packages/theme/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts +++ b/packages/theme/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts @@ -19,7 +19,7 @@ jest.mock('@nuxtjs/composition-api', () => { return { ...originalModule, useContext: jest.fn(() => ({ app: { localePath: (suffix: unknown) => `/default${suffix}` } })), - useRoute: jest.fn(() => ({ value: { path: '/default/c/what-is-new.html' } })), + useRoute: jest.fn(() => ({ value: { path: '/default/what-is-new.html' } })), }; }); diff --git a/packages/theme/modules/catalog/category/helpers/useTraverseCategory.ts b/packages/theme/modules/catalog/category/helpers/useTraverseCategory.ts index cf1c75865..7a1e63757 100644 --- a/packages/theme/modules/catalog/category/helpers/useTraverseCategory.ts +++ b/packages/theme/modules/catalog/category/helpers/useTraverseCategory.ts @@ -19,7 +19,7 @@ export function useTraverseCategory() { const activeCategory = computed(() => { // on localhost the default store is localhost:3000/default/ but in a multi-store Magento instance this can change const urlPathToFind = route.value.path - .replace(context.app.localePath('/c'), '') + .replace(context.app.localePath('/'), '') .replace(/^\//, '') .replace('.html', ''); diff --git a/packages/theme/modules/catalog/index.ts b/packages/theme/modules/catalog/index.ts index 1edc01a0f..e957a0291 100644 --- a/packages/theme/modules/catalog/index.ts +++ b/packages/theme/modules/catalog/index.ts @@ -1,22 +1,5 @@ -import path from 'node:path'; -import url from 'node:url'; import type { Module } from '@nuxt/types'; -import type { NuxtRouteConfig } from '@nuxt/types/config/router'; -const nuxtModule : Module = function categoryModule() { - const themeDir = path.dirname(url.fileURLToPath(import.meta.url)); - - this.extendRoutes((routes: NuxtRouteConfig[]) => { - routes.unshift({ - name: 'category', - path: '/c/:slug_1/:slug_2?/:slug_3?/:slug_4?/:slug_5?', - component: path.resolve(themeDir, 'pages/category.vue'), - }, { - name: 'product', - path: '/p/:id/:slug/', - component: path.resolve(themeDir, 'pages/product.vue'), - }); - }); -}; +const nuxtModule : Module = function categoryModule() {}; export default nuxtModule; diff --git a/packages/theme/modules/catalog/pages/category.vue b/packages/theme/modules/catalog/pages/category.vue index 1602260bd..1dc0e8708 100644 --- a/packages/theme/modules/catalog/pages/category.vue +++ b/packages/theme/modules/catalog/pages/category.vue @@ -113,30 +113,35 @@ import { } from '@storefront-ui/vue'; import { computed, - defineComponent, onMounted, ref, ssrRef, useFetch, + defineComponent, + onMounted, + ref, + ssrRef, + useFetch, } from '@nuxtjs/composition-api'; import { CacheTagPrefix, useCache } from '@vue-storefront/cache'; +import { usePageStore } from '~/stores/page'; import SkeletonLoader from '~/components/SkeletonLoader/index.vue'; import CategoryPagination from '~/modules/catalog/category/components/pagination/CategoryPagination.vue'; import { + useCategory, useFacet, useUiHelpers, useUiState, } from '~/composables'; import { useAddToCart } from '~/helpers/cart/addToCart'; -import { useUrlResolver } from '~/composables/useUrlResolver'; import { useWishlist } from '~/modules/wishlist/composables/useWishlist'; import { usePrice } from '~/modules/catalog/pricing/usePrice'; import { useCategoryContent } from '~/modules/catalog/category/components/cms/useCategoryContent'; import { useTraverseCategory } from '~/modules/catalog/category/helpers/useTraverseCategory'; import facetGetters from '~/modules/catalog/category/getters/facetGetters'; +import { getMetaInfo } from '~/helpers/getMetaInfo'; import CategoryNavbar from '~/modules/catalog/category/components/navbar/CategoryNavbar.vue'; import CategoryBreadcrumbs from '~/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue'; -import { isCategoryTreeRoute } from '~/modules/GraphQL/CategoryTreeRouteTypeguard'; -import type { ProductInterface, CategoryTree } from '~/modules/GraphQL/types'; +import type { ProductInterface } from '~/modules/GraphQL/types'; import type { SortingModel } from '~/modules/catalog/category/composables/useFacet/sortingOptions'; import type { Pagination } from '~/composables/types'; import type { Product } from '~/modules/catalog/product/types'; @@ -159,7 +164,9 @@ export default defineComponent({ }, transition: 'fade', setup() { + const { routeData } = usePageStore(); const { getContentData } = useCategoryContent(); + const { loadCategoryMeta } = useCategory(); const { addTags } = useCache(); const uiHelpers = useUiHelpers(); const cmsContent = ref(''); @@ -171,7 +178,6 @@ export default defineComponent({ const productContainerElement = ref(null); - const { search: resolveUrl } = useUrlResolver(); const { toggleFilterSidebar, changeToCategoryListView, @@ -180,6 +186,7 @@ export default defineComponent({ isFilterSidebarOpen, } = useUiState(); const { + load: loadWishlist, addItem: addItemToWishlistBase, isInWishlist, removeItem: removeItemFromWishlist, @@ -187,6 +194,8 @@ export default defineComponent({ const { result, search } = useFacet(); const { addItemToCart } = useAddToCart(); + const categoryMeta = ref(null); + const addItemToWishlist = async (product: Product) => { await (isInWishlist({ product }) ? removeItemFromWishlist({ product }) @@ -195,22 +204,21 @@ export default defineComponent({ const { activeCategory, loadCategoryTree } = useTraverseCategory(); const activeCategoryName = computed(() => activeCategory.value?.name ?? ''); - const routeData = ref(null); + + const categoryUid = routeData.uid; const { fetch } = useFetch(async () => { if (!activeCategory.value) { - loadCategoryTree(); + await loadCategoryTree(); } - const resolvedUrl = await resolveUrl(); - if (isCategoryTreeRoute(resolvedUrl)) routeData.value = resolvedUrl; - - const categoryUid = routeData.value?.uid; - const [content] = await Promise.all([ - getContentData(routeData.value?.uid), + const [content, categoryMetaData] = await Promise.all([ + getContentData(categoryUid as string), + loadCategoryMeta({ category_uid: routeData.value?.uid }), search({ ...uiHelpers.getFacetsFromURL(), category_uid: categoryUid }), ]); + categoryMeta.value = categoryMetaData; cmsContent.value = content?.cmsBlock?.content ?? ''; isShowCms.value = content.isShowCms; isShowProducts.value = content.isShowProducts; @@ -219,7 +227,7 @@ export default defineComponent({ sortBy.value = facetGetters.getSortOptions(result.value); pagination.value = facetGetters.getPagination(result.value); - const tags = [{ prefix: CacheTagPrefix.View, value: 'category' }]; + const tags = [{ prefix: CacheTagPrefix.View, value: routeData.uid }]; const productTags = products.value.map((product) => ({ prefix: CacheTagPrefix.Product, value: product.uid, @@ -229,16 +237,27 @@ export default defineComponent({ }); const isPriceLoaded = ref(false); + onMounted(async () => { + loadWishlist(); const { getPricesBySku } = usePrice(); if (products.value.length > 0) { const skus = products.value.map((item) => item.sku); const priceData = await getPricesBySku(skus, pagination.value.itemsPerPage); - products.value = products.value.map((product) => ({ - ...product, - price_range: priceData.items.find((item) => item.sku === product.sku)?.price_range, - })); + products.value = products.value.map((product) => { + const priceRange = priceData.items.find((item) => item.sku === product.sku)?.price_range; + + if (priceRange) { + return { + ...product, + price_range: priceRange, + }; + } + + return { ...product }; + }); } + isPriceLoaded.value = true; }); @@ -277,10 +296,14 @@ export default defineComponent({ routeData, doChangeItemsPerPage, productContainerElement, + categoryMeta, onReloadProducts, goToPage, }; }, + head() { + return getMetaInfo(this.categoryMeta); + }, }); diff --git a/packages/theme/modules/catalog/pages/product.vue b/packages/theme/modules/catalog/pages/product.vue index 733ef8973..0013c3276 100644 --- a/packages/theme/modules/catalog/pages/product.vue +++ b/packages/theme/modules/catalog/pages/product.vue @@ -43,9 +43,11 @@ import { useCache, CacheTagPrefix } from '@vue-storefront/cache'; import { SfBreadcrumbs, SfLoader } from '@storefront-ui/vue'; import { getBreadcrumbs } from '~/modules/catalog/product/getters/productGetters'; import { useProduct } from '~/modules/catalog/product/composables/useProduct'; +import { getMetaInfo } from '~/helpers/getMetaInfo'; +import { usePageStore } from '~/stores/page'; import { ProductTypeEnum } from '~/modules/catalog/product/enums/ProductTypeEnum'; +import { useWishlist, useApi } from '~/composables'; import LoadWhenVisible from '~/components/utils/LoadWhenVisible.vue'; -import { useApi } from '~/composables'; import type { Product } from '~/modules/catalog/product/types'; import type { ProductDetailsQuery } from '~/modules/GraphQL/types'; import ProductSkeleton from '~/modules/catalog/product/components/ProductSkeleton.vue'; @@ -69,6 +71,7 @@ export default defineComponent({ }, transition: 'fade', setup() { + const { routeData } = usePageStore(); const { query } = useApi(); const product = ref(null); const { addTags } = useCache(); @@ -76,8 +79,7 @@ export default defineComponent({ const route = useRoute(); const { getProductDetails, loading } = useProduct(); const { error: nuxtError } = useContext(); - const { params: { id } } = route.value; - + const { load: loadWishlist } = useWishlist(); const breadcrumbs = computed(() => { const productCategories = product.value?.categories ?? []; return getBreadcrumbs( @@ -89,7 +91,7 @@ export default defineComponent({ const getBaseSearchQuery = () => ({ filter: { sku: { - eq: id, + eq: routeData.sku, }, }, configurations: Object.entries(route.value.query) @@ -124,7 +126,7 @@ export default defineComponent({ const tags = [ { prefix: CacheTagPrefix.View, - value: `product-${id}`, + value: `product-${routeData.sku}`, }, ]; @@ -137,7 +139,9 @@ export default defineComponent({ addTags([...tags, ...productTags]); }); - onMounted(async () => fetchProductExtendedData()); + onMounted(async () => { + await Promise.all([fetchProductExtendedData(), loadWishlist()]); + }); return { renderer, @@ -147,6 +151,9 @@ export default defineComponent({ fetchProduct: fetchProductExtendedData, }; }, + head() { + return getMetaInfo(this.product); + }, }); diff --git a/packages/theme/pages/Home.vue b/packages/theme/pages/Home.vue index 826b28ea3..a16ef3bc2 100644 --- a/packages/theme/pages/Home.vue +++ b/packages/theme/pages/Home.vue @@ -40,7 +40,7 @@ class="products" :button-text="$t('See more')" :title="$t('New Products')" - link="/c/women.html" + link="/women.html" /> @@ -70,11 +70,15 @@ import { ref, useContext, onMounted, + useFetch, } from '@nuxtjs/composition-api'; import LazyHydrate from 'vue-lazy-hydration'; import { useCache, CacheTagPrefix } from '@vue-storefront/cache'; import { SfBanner, SfBannerGrid } from '@storefront-ui/vue'; +import { CmsPage } from '~/modules/GraphQL/types'; import HeroSection from '~/components/HeroSection.vue'; +import { getMetaInfo } from '~/helpers/getMetaInfo'; +import { useContent } from '~/composables'; import LoadWhenVisible from '~/components/utils/LoadWhenVisible.vue'; export default defineComponent({ @@ -93,9 +97,12 @@ export default defineComponent({ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types setup() { const { addTags } = useCache(); + const { loadPage } = useContent(); const { app } = useContext(); const year = new Date().getFullYear(); const { isDesktop } = app.$device; + + const page = ref(null); const hero = ref({ title: app.i18n.t('Colorful summer dresses are already in store'), subtitle: app.i18n.t('SUMMER COLLECTION {year}', { year }), @@ -107,7 +114,7 @@ export default defineComponent({ fit: 'cover', format: 'webp', }, - link: '/c/women.html', + link: '/women.html', }); const banners = ref([ { @@ -131,7 +138,7 @@ export default defineComponent({ format: 'webp', }, class: 'sf-banner--slim desktop-only', - link: '/c/women/women-clothing-skirts', + link: '/women/women-clothing-skirts', }, { slot: 'banner-B', @@ -149,7 +156,7 @@ export default defineComponent({ format: 'webp', }, class: 'sf-banner--slim banner-central desktop-only', - link: '/c/women/women-clothing-dresses', + link: '/women/women-clothing-dresses', }, { slot: 'banner-C', @@ -163,7 +170,7 @@ export default defineComponent({ format: 'webp', }, class: 'sf-banner--slim banner__tshirt', - link: '/c/women/women-clothing-shirts', + link: '/women/women-clothing-shirts', }, { slot: 'banner-D', @@ -177,7 +184,7 @@ export default defineComponent({ format: 'webp', }, class: 'sf-banner--slim', - link: '/c/women/women-shoes-sandals', + link: '/women/women-shoes-sandals', }, ]); const callToAction = ref({ @@ -193,6 +200,10 @@ export default defineComponent({ }, }); + useFetch(async () => { + page.value = await loadPage({ identifier: 'home' }); + }); + onMounted(() => { addTags([{ prefix: CacheTagPrefix.View, value: 'home' }]); }); @@ -202,8 +213,12 @@ export default defineComponent({ banners, callToAction, hero, + page, }; }, + head() { + return getMetaInfo(this.page); + }, }); diff --git a/packages/theme/pages/Page.vue b/packages/theme/pages/Page.vue index b75603410..0a5a0f71f 100644 --- a/packages/theme/pages/Page.vue +++ b/packages/theme/pages/Page.vue @@ -1,90 +1,41 @@ + - diff --git a/packages/theme/routes.js b/packages/theme/routes.js index 2f3f6aad5..994f73775 100644 --- a/packages/theme/routes.js +++ b/packages/theme/routes.js @@ -2,15 +2,16 @@ import path from 'node:path'; import url from 'node:url'; export function getRoutes(themeDir = path.dirname(url.fileURLToPath(import.meta.url))) { - return [{ - name: 'home', - path: '/', - component: path.resolve(themeDir, 'pages/Home.vue'), - }, - { - name: 'page', - path: '/:slug+', - component: path.resolve(themeDir, 'pages/Page.vue'), - }, + return [ + { + name: 'home', + path: '/', + component: path.resolve(themeDir, 'pages/Home.vue'), + }, + { + name: 'page', + path: '/:slug+', + component: path.resolve(themeDir, 'pages/Page.vue'), + }, ]; } diff --git a/packages/theme/stores/page.ts b/packages/theme/stores/page.ts new file mode 100644 index 000000000..741ddc6ae --- /dev/null +++ b/packages/theme/stores/page.ts @@ -0,0 +1,11 @@ +import { defineStore } from 'pinia'; + +interface PageState { + routeData: any; +} + +export const usePageStore = defineStore('page', { + state: (): PageState => ({ + routeData: null, + }), +}); diff --git a/packages/theme/tests/unit/mocks/useRoute.ts b/packages/theme/tests/unit/mocks/useRoute.ts index 0200fb334..54c41d2c5 100644 --- a/packages/theme/tests/unit/mocks/useRoute.ts +++ b/packages/theme/tests/unit/mocks/useRoute.ts @@ -1,7 +1,7 @@ export const useRouteMock = (extend = {}) => ({ value: { - path: '/default/c/gear.html', - fullPath: '/default/c/gear.html', + path: '/default/gear.html', + fullPath: '/default/gear.html', }, ...extend, }); diff --git a/yarn.lock b/yarn.lock index d2aa78933..789454730 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + "@ampproject/remapping@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" @@ -34,14 +39,14 @@ tslib "^2.3.0" zen-observable-ts "^1.2.5" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: "@babel/highlight" "^7.16.7" -"@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -53,10 +58,10 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/compat-data@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" - integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.16.0", "@babel/core@^7.17.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.17.5" @@ -80,20 +85,20 @@ semver "^6.3.0" "@babel/core@^7.11.6", "@babel/core@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" - integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helpers" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/generator" "^7.18.13" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.13" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.13" + "@babel/types" "^7.18.13" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -109,12 +114,12 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.18.6": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" - integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== +"@babel/generator@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== dependencies: - "@babel/types" "^7.18.7" + "@babel/types" "^7.18.13" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -125,6 +130,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" @@ -133,6 +145,14 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" @@ -143,12 +163,12 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" - integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.18.6" + "@babel/compat-data" "^7.18.8" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -166,6 +186,19 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz#63e771187bd06d234f95fdf8bd5f8b6429de6298" + integrity sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" @@ -174,6 +207,14 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" @@ -188,6 +229,18 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" @@ -195,10 +248,10 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-environment-visitor@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" - integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" @@ -207,6 +260,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" @@ -216,13 +276,13 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" - integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== dependencies: "@babel/template" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.9" "@babel/helper-get-function-arity@^7.16.7": version "7.16.7" @@ -252,6 +312,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -280,19 +347,19 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" -"@babel/helper-module-transforms@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" - integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== dependencies: - "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-simple-access" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.18.6" "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -301,11 +368,23 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" @@ -315,6 +394,16 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -326,6 +415,17 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-simple-access@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" @@ -347,6 +447,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" @@ -361,6 +468,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" @@ -391,6 +503,16 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" + "@babel/helpers@^7.17.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" @@ -400,14 +522,14 @@ "@babel/traverse" "^7.17.0" "@babel/types" "^7.17.0" -"@babel/helpers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" - integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" "@babel/highlight@^7.16.7": version "7.16.10" @@ -432,10 +554,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== -"@babel/parser@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" - integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== +"@babel/parser@^7.18.10", "@babel/parser@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" @@ -444,6 +566,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" @@ -453,6 +582,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" @@ -462,7 +600,17 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -470,6 +618,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-class-static-block@^7.16.7": version "7.17.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" @@ -479,6 +635,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@^7.13.15": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" @@ -498,6 +663,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-namespace-from@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" @@ -506,6 +679,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" @@ -514,6 +695,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" @@ -522,6 +711,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" @@ -530,6 +727,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" @@ -538,7 +743,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.16.0", "@babel/plugin-proposal-object-rest-spread@^7.16.7": +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.16.7": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== @@ -549,6 +762,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.7" +"@babel/plugin-proposal-object-rest-spread@^7.16.0", "@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" @@ -557,6 +781,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" @@ -566,6 +798,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.13.0", "@babel/plugin-proposal-private-methods@^7.16.11": version "7.16.11" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" @@ -574,6 +815,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.10" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" @@ -584,6 +833,16 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" @@ -592,6 +851,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-unicode-property-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -648,6 +915,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -669,6 +943,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -739,6 +1020,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" @@ -748,6 +1036,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" @@ -755,6 +1052,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" @@ -762,6 +1066,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" @@ -776,6 +1087,20 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" @@ -783,6 +1108,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.16.7": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" @@ -790,6 +1122,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" + integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" @@ -798,6 +1137,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-dotall-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-duplicate-keys@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" @@ -805,6 +1152,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" @@ -813,6 +1167,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-flow-strip-types@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" @@ -828,6 +1190,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" @@ -837,6 +1206,15 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" @@ -844,6 +1222,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" @@ -851,6 +1236,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-modules-amd@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" @@ -860,6 +1252,15 @@ "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" @@ -870,6 +1271,16 @@ "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" @@ -881,6 +1292,17 @@ "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" @@ -889,6 +1311,14 @@ "@babel/helper-module-transforms" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" @@ -896,6 +1326,14 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-new-target@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" @@ -903,6 +1341,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" @@ -911,6 +1356,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" @@ -918,6 +1371,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" @@ -925,21 +1385,35 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.16.7": +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-display-name@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.16.7": +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.0.0": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== @@ -950,13 +1424,24 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.17.0" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1" + integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.10" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.16.7": version "7.16.7" @@ -965,6 +1450,14 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + "@babel/plugin-transform-reserved-words@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" @@ -972,7 +1465,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-runtime@^7.13.15", "@babel/plugin-transform-runtime@^7.16.0": +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.13.15": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== @@ -984,6 +1484,18 @@ babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" +"@babel/plugin-transform-runtime@^7.16.0": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + semver "^6.3.0" + "@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" @@ -991,6 +1503,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" @@ -999,6 +1518,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" @@ -1006,6 +1533,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" @@ -1013,6 +1547,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-typeof-symbol@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" @@ -1020,6 +1561,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" @@ -1027,6 +1575,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-unicode-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" @@ -1035,7 +1590,15 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.14.1", "@babel/preset-env@^7.16.0": +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.14.1": version "7.16.11" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== @@ -1115,6 +1678,87 @@ core-js-compat "^3.20.2" semver "^6.3.0" +"@babel/preset-env@^7.16.0": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" @@ -1127,36 +1771,36 @@ esutils "^2.0.2" "@babel/preset-react@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/runtime-corejs3@^7.10.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz#6f02c5536911f4b445946a2179554b95c8838635" - integrity sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.16.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.0", "@babel/runtime@^7.9.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" @@ -1169,14 +1813,14 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/template@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== +"@babel/template@^7.18.10", "@babel/template@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.9", "@babel/traverse@^7.16.3", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": version "7.17.3" @@ -1194,19 +1838,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" - integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== +"@babel/traverse@^7.18.11", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" + "@babel/generator" "^7.18.13" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.13" + "@babel/types" "^7.18.13" debug "^4.1.0" globals "^11.1.0" @@ -1218,11 +1862,12 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.18.6", "@babel/types@^7.18.7": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.7.tgz#a4a2c910c15040ea52cdd1ddb1614a65c8041726" - integrity sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ== +"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" @@ -1259,6 +1904,11 @@ dependencies: lodash.snakecase "^4.1.1" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@commitlint/cli@^16.1.0": version "16.2.1" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-16.2.1.tgz#ca4e557829a2755f0e1f0cd69b56b83ce2510173" @@ -1777,12 +2427,12 @@ p-limit "3.1.0" tslib "~2.3.0" -"@graphql-tools/merge@8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.0.tgz#d3a8ba10942f8598788c3e03f97cc1d0c0b055f8" - integrity sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA== +"@graphql-tools/merge@8.3.3": + version "8.3.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.3.tgz#74dd4816c3fc7af38730fc59d1cba6e687d7fb2d" + integrity sha512-EfULshN2s2s2mhBwbV9WpGnoehRLe7eIMdZrKfHhxlBWOvtNUd3KSCN0PUdAMd7lj1jXUW9KYdn624JrVn6qzg== dependencies: - "@graphql-tools/utils" "8.8.0" + "@graphql-tools/utils" "8.10.0" tslib "^2.4.0" "@graphql-tools/merge@^8.2.1", "@graphql-tools/merge@^8.2.3": @@ -1845,13 +2495,13 @@ tslib "~2.3.0" value-or-promise "1.0.11" -"@graphql-tools/schema@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.0.tgz#0332b3a2e674d16e9bf8a58dfd47432449ce2368" - integrity sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww== +"@graphql-tools/schema@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.1.tgz#ba8629107c1f0b9ffad14c08c2a85961967682fd" + integrity sha512-Y6apeiBmvXEz082IAuS/ainnEEQrzMECP1MRIV72eo2WPa6ZtLYPycvIbd56Z5uU2LKP4XcWRgK6WUbCyN16Rw== dependencies: - "@graphql-tools/merge" "8.3.0" - "@graphql-tools/utils" "8.8.0" + "@graphql-tools/merge" "8.3.3" + "@graphql-tools/utils" "8.10.0" tslib "^2.4.0" value-or-promise "1.0.11" @@ -1880,6 +2530,13 @@ value-or-promise "^1.0.11" ws "^8.3.0" +"@graphql-tools/utils@8.10.0": + version "8.10.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.10.0.tgz#8e76db7487e19b60cf99fb90c2d6343b2105b331" + integrity sha512-yI+V373FdXQbYfqdarehn9vRWDZZYuvyQ/xwiv5ez2BbobHrqsexF7qs56plLRaQ8ESYpVAjMQvJWe9s23O0Jg== + dependencies: + tslib "^2.4.0" + "@graphql-tools/utils@8.6.2", "@graphql-tools/utils@^8.1.1", "@graphql-tools/utils@^8.3.0", "@graphql-tools/utils@^8.5.1", "@graphql-tools/utils@^8.5.2", "@graphql-tools/utils@^8.6.1", "@graphql-tools/utils@^8.6.2": version "8.6.2" resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.6.2.tgz#095408135f091aac68fe18a0a21b708e685500da" @@ -1887,13 +2544,6 @@ dependencies: tslib "~2.3.0" -"@graphql-tools/utils@8.8.0": - version "8.8.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.8.0.tgz#8332ff80a1da9204ccf514750dd6f5c5cccf17dc" - integrity sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw== - dependencies: - tslib "^2.4.0" - "@graphql-tools/wrap@^8.4.2": version "8.4.2" resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-8.4.2.tgz#7179ea573686939c6002b200e273cf0e55d6323b" @@ -1983,16 +2633,16 @@ jest-util "^27.5.1" slash "^3.0.0" -"@jest/console@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.1.tgz#305f8ca50b6e70413839f54c0e002b60a0f2fd7d" - integrity sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA== +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-message-util "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" "@jest/core@^27.5.1": @@ -2039,6 +2689,13 @@ "@types/node" "*" jest-mock "^27.5.1" +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + "@jest/fake-timers@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" @@ -2091,12 +2748,12 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/schemas@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613" - integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== dependencies: - "@sinclair/typebox" "^0.23.3" + "@sinclair/typebox" "^0.24.1" "@jest/source-map@^27.5.1": version "27.5.1" @@ -2117,13 +2774,13 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.1.tgz#c6f18d1bbb01aa88925dd687872a75f8414b317a" - integrity sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ== +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: - "@jest/console" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" @@ -2158,22 +2815,22 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" - integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" jest-regex-util "^28.0.2" - jest-util "^28.1.1" + jest-util "^28.1.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -2201,12 +2858,12 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" - integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: - "@jest/schemas" "^28.0.2" + "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2276,9 +2933,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.13": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -3014,9 +3671,9 @@ glob-to-regexp "^0.3.0" "@mswjs/cookies@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.1.tgz#66a283b45970ffc5350d22657983a1377ea6bf97" - integrity sha512-0tDfcPw5/s7QsNQqS3knAvAD5w5PF1nNPagRhKO/yECY+sMbJxoC2sLWnH7Lzmh52mTSVLKDhd1r92Q3kfljnQ== + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.2.tgz#b4e207bf6989e5d5427539c2443380a33ebb922b" + integrity sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g== dependencies: "@types/set-cookie-parser" "^2.4.0" set-cookie-parser "^2.4.6" @@ -3078,9 +3735,9 @@ semver "^7.3.5" "@npmcli/fs@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" - integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" semver "^7.3.5" @@ -3131,9 +3788,9 @@ rimraf "^3.0.2" "@npmcli/move-file@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" - integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" rimraf "^3.0.2" @@ -3183,9 +3840,9 @@ read-package-json-fast "^2.0.3" "@npmcli/run-script@^4.1.0": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.5.tgz#d60a7d41321612a9c0e1433797c10c19d0213d55" - integrity sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q== + version "4.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" @@ -3868,9 +4525,9 @@ graceful-fs "4.2.10" "@pnpm/npm-conf@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.4.tgz#e2c927a933f55e9211e12ef6cc4885ce915211ce" - integrity sha512-o5YFq/+ksEJMbSzzkaQDHlp00aonLDU5xNPVTRL12hTWBbVSSeWXxPukq75h+mvXnoOWT95vV2u1HSTw2C4XOw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" + integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== dependencies: "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" @@ -3895,20 +4552,20 @@ dependencies: any-observable "^0.3.0" -"@sinclair/typebox@^0.23.3": - version "0.23.5" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" - integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== +"@sinclair/typebox@^0.24.1": + version "0.24.28" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.28.tgz#15aa0b416f82c268b1573ab653e4413c965fe794" + integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@sindresorhus/is@^5.2.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" + integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== "@sinonjs/commons@^1.7.0": version "1.8.3" @@ -3976,24 +4633,24 @@ pretty-format "^26.6.2" "@testing-library/jest-dom@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" - integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== dependencies: + "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.5.6" lodash "^4.17.15" redent "^3.0.0" "@testing-library/user-event@^14.2.1": - version "14.2.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.2.1.tgz#8c5ff2d004544bb2220e1d864f7267fe7eb6c556" - integrity sha512-HOr1QiODrq+0j9lKU5i10y9TbhxMBMRMGimNx10asdmau9cb8Xb1Vyg0GvTwyIL2ziQyh2kAloOtAQFBQVuecA== + version "14.4.3" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" + integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== "@testing-library/vue@^5.8.3": version "5.8.3" @@ -4198,9 +4855,9 @@ "@types/node" "*" "@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== dependencies: "@types/node" "*" "@types/qs" "*" @@ -4288,7 +4945,15 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@^27.4.0": +"@types/jest@*": + version "28.1.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + +"@types/jest@^27.4.0": version "27.4.1" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== @@ -4296,11 +4961,6 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/js-cookie@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.1.tgz#04aa743e2e0a85a22ee9aa61f6591a8bc19b5d68" - integrity sha512-7wg/8gfHltklehP+oyJnZrz9XBuX5ZPP4zB6UsI84utdlkRYLnOm2HfpLXazTwZA+fpGn0ir8tGNgVnMEleBGQ== - "@types/js-levenshtein@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" @@ -4348,9 +5008,9 @@ "@types/node" "*" "@types/k6@^0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.37.0.tgz#fb357d5218c8c2b5bc197dae818eebe7085906fc" - integrity sha512-8ou8tK3i/8HJFiyxz9ktrT1CWvtdItlq5ybaysnnwX7wSNLZv3TdR28Q2kW9byYVJKNhuwOnoecB2oM/NytN2Q== + version "0.37.1" + resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.37.1.tgz#e8db6269307ad73d4a6d710a5762818bb6149e85" + integrity sha512-+FksZAlA+JnDYgOiElQa7+KlUGmzoElRNqRnGB4ICPHbBR6EIqcl81Tdhe1b9dT8M2QVTtQY7++FTHNpIQVFMg== "@types/keyv@*": version "3.1.4" @@ -4372,9 +5032,14 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.182" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== + version "4.14.184" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.184.tgz#23f96cd2a21a28e106dc24d825d4aa966de7a9fe" + integrity sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q== + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/mime@^1": version "1.3.2" @@ -4392,9 +5057,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node-sass@*": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@types/node-sass/-/node-sass-4.11.2.tgz#ecdaa44a1ba8847bf7dea2aadbfe33a91a263514" - integrity sha512-pOFlTw/OtZda4e+yMjq6/QYuvY0RDMQ+mxXdWj7rfSyf18V8hS4SfgurO+MasAkQsv6Wt6edOGlwh5QqJml9gw== + version "4.11.3" + resolved "https://registry.yarnpkg.com/@types/node-sass/-/node-sass-4.11.3.tgz#cabbe257bb1b615fcf0f8536d4673102e9930a3d" + integrity sha512-wXPCn3t9uu5rR4zXNSLasZHQMuRzUKBsdi4MsgT8uq4Lp1gQQo+T2G23tGj4SSgDHeNBle6vGseZtM2XV/X9bw== dependencies: "@types/node" "*" @@ -4414,9 +5079,9 @@ integrity sha512-cPjLXj8d6anFPzFvOPxS3fvly3Shm5nTfl6g8X5smexixbuGUf7hfr21J5tX9JW+UPStp/5P5R8qrKL5IyVJ+A== "@types/node@^14.14.31": - version "14.18.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24" - integrity sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A== + version "14.18.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.26.tgz#239e19f8b4ea1a9eb710528061c1d733dc561996" + integrity sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -4448,7 +5113,7 @@ "@types/pug@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.4.tgz#8772fcd0418e3cd2cc171555d73007415051f4b2" - integrity sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI= + integrity sha512-cevKhB0yUJCFKzCnkB6HbDRZdYwVRRXzhIKRDgfAR1dnzEwZLRGf5lKpLJLZEP/odmaWT+gWNwH02bRhQIBYPg== "@types/q@^1.5.1": version "1.5.5" @@ -4499,11 +5164,11 @@ integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== "@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== dependencies: - "@types/mime" "^1" + "@types/mime" "*" "@types/node" "*" "@types/serve-static@1.13.9": @@ -4544,7 +5209,7 @@ "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== "@types/strip-json-comments@0.0.30": version "0.0.30" @@ -4565,9 +5230,9 @@ terser "^4.6.13" "@types/testing-library__jest-dom@^5.9.1": - version "5.14.2" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz#564fb2b2dc827147e937a75b639a05d17ce18b44" - integrity sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg== + version "5.14.5" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" + integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== dependencies: "@types/jest" "*" @@ -4699,9 +5364,9 @@ "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" - integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" @@ -4877,17 +5542,6 @@ dependencies: "@vue-storefront/core" "~2.7.1" -"@vue-storefront/core@~2.5.6": - version "2.5.6" - resolved "https://registry.yarnpkg.com/@vue-storefront/core/-/core-2.5.6.tgz#dfbfce48487a9a4a6b34576fb23d625ed0ebfada" - integrity sha512-+nJHlcUdn0hJs0lD4AdxGZzLj3GrI9wXvPw1SFR4i2q0cJDiaCyoX/13e7BuRbJOuI8Cnoe/oK+O9VWZXrvXOQ== - dependencies: - axios "0.21.1" - express "^4.17.1" - is-https "^3.0.2" - lodash-es "^4.17.15" - vue "^2.6.11" - "@vue-storefront/core@~2.7.1": version "2.7.1" resolved "https://registry.yarnpkg.com/@vue-storefront/core/-/core-2.7.1.tgz#ff9ae1577e42783d97bd365c6694ca9b44c76883" @@ -4898,6 +5552,11 @@ lodash-es "^4.17.15" vue "^2.6.11" +"@vue-storefront/http-cache@^2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/http-cache/-/http-cache-2.7.1.tgz#d33470efd404ebb24e73682707fb278d1d5d4b45" + integrity sha512-B5Qf39yodsS35dzKDCvLF5qgggyIFnbUq0iKc114VotLfkU68GXDFRkfE8mNhgtnjWOWAco04OmvWaxO5BI6PQ== + "@vue-storefront/middleware@~2.7.1": version "2.7.1" resolved "https://registry.yarnpkg.com/@vue-storefront/middleware/-/middleware-2.7.1.tgz#f289adca30ab5665bed13df2b55a7de879b9ff70" @@ -5445,7 +6104,7 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -5483,7 +6142,7 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: +acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== @@ -5770,9 +6429,9 @@ aria-query@^4.2.2: "@babel/runtime-corejs3" "^7.10.2" aria-query@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + version "5.0.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1" + integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q== arr-diff@^4.0.0: version "4.0.0" @@ -6015,7 +6674,7 @@ axios@^0.26.1: babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -6053,14 +6712,14 @@ babel-jest@^27.5.1: slash "^3.0.0" babel-jest@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" - integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== dependencies: - "@jest/transform" "^28.1.2" + "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.1" + babel-preset-jest "^28.1.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -6078,7 +6737,7 @@ babel-loader@^8.2.2: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== dependencies: babel-runtime "^6.22.0" @@ -6115,10 +6774,10 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz#5e055cdcc47894f28341f87f5e35aad2df680b11" - integrity sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw== +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -6134,6 +6793,15 @@ babel-plugin-polyfill-corejs2@^0.3.0: "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" + semver "^6.1.1" + babel-plugin-polyfill-corejs3@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" @@ -6142,6 +6810,14 @@ babel-plugin-polyfill-corejs3@^0.5.0: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" + babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" @@ -6149,6 +6825,13 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" @@ -6167,7 +6850,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.26.0: babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -6231,18 +6914,18 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz#5b6e5e69f963eb2d70f739c607b8f723c0ee75e4" - integrity sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g== +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== dependencies: - babel-plugin-jest-hoist "^28.1.1" + babel-plugin-jest-hoist "^28.1.3" babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -6250,7 +6933,7 @@ babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -6261,7 +6944,7 @@ babel-template@^6.26.0: babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -6276,7 +6959,7 @@ babel-traverse@^6.26.0: babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -6712,7 +7395,17 @@ browserify@^17.0.0: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@*, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.4: +browserslist@*, browserslist@^4.20.2, browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.4: version "4.19.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== @@ -6723,16 +7416,6 @@ browserslist@*, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, node-releases "^2.0.2" picocolors "^1.0.0" -browserslist@^4.20.2: - version "4.21.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.1.tgz#c9b9b0a54c7607e8dc3e01a0d311727188011a00" - integrity sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ== - dependencies: - caniuse-lite "^1.0.30001359" - electron-to-chromium "^1.4.172" - node-releases "^2.0.5" - update-browserslist-db "^1.0.4" - bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -6885,9 +7568,9 @@ cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: unique-filename "^1.1.1" cacache@^16.0.0, cacache@^16.1.0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" - integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" @@ -6906,7 +7589,7 @@ cacache@^16.0.0, cacache@^16.1.0: rimraf "^3.0.2" ssri "^9.0.0" tar "^6.1.11" - unique-filename "^1.1.1" + unique-filename "^2.0.0" cache-base@^1.0.1: version "1.0.1" @@ -6936,9 +7619,9 @@ cache-loader@^4.1.0: schema-utils "^2.0.0" cacheable-lookup@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz#65c0e51721bb7f9f2cb513aed6da4a1b93ad7dc8" - integrity sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A== + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== cacheable-request@^6.0.0: version "6.1.0" @@ -7073,10 +7756,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== -caniuse-lite@^1.0.30001359: - version "1.0.30001363" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz#26bec2d606924ba318235944e1193304ea7c4f15" - integrity sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg== +caniuse-lite@^1.0.30001370: + version "1.0.30001383" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz#aecf317ccd940690725ae3ae4f28293c5fb8050e" + integrity sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg== capital-case@^1.0.4: version "1.0.4" @@ -7208,7 +7891,7 @@ charm@~0.1.1: check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.3.1, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.2: version "3.5.3" @@ -7356,13 +8039,13 @@ cli-spinners@^2.5.0: integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-table3@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" - integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: string-width "^4.2.0" optionalDependencies: - colors "1.4.0" + "@colors/colors" "1.5.0" cli-table@^0.3.11: version "0.3.11" @@ -7458,7 +8141,7 @@ clone-response@^1.0.2: clone@2.x: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== clone@^1.0.2: version "1.0.4" @@ -7602,11 +8285,6 @@ colors@1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -colors@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - columnify@^1.5.4: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -7618,7 +8296,7 @@ columnify@^1.5.4: combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= + integrity sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg== dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" @@ -7668,9 +8346,9 @@ commander@^9.0.0: integrity sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw== commander@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" - integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw== + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== commitizen@^4.0.3, commitizen@^4.2.4: version "4.2.4" @@ -7769,9 +8447,9 @@ concat-stream@^2.0.0: typedarray "^0.0.6" concurrently@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.2.2.tgz#4ad4a4dfd3945f668d727379de2a29502e6a531c" - integrity sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw== + version "7.3.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.3.0.tgz#eb45cdbc8df43da195f619aba218a980cae49184" + integrity sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA== dependencies: chalk "^4.1.0" date-fns "^2.16.1" @@ -7786,13 +8464,13 @@ concurrently@^7.2.2: condense-newlines@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= + integrity sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg== dependencies: extend-shallow "^2.0.1" is-whitespace "^0.3.0" kind-of "^3.0.2" -config-chain@^1.1.11, config-chain@^1.1.12: +config-chain@^1.1.11, config-chain@^1.1.12, config-chain@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== @@ -8010,7 +8688,7 @@ convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= + integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== cookie-parser@^1.4.5: version "1.4.6" @@ -8033,14 +8711,6 @@ cookie-universal-nuxt@^2.2.1: "@types/cookie" "^0.3.3" cookie-universal "^2.2.1" -cookie-universal@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/cookie-universal/-/cookie-universal-2.1.5.tgz#9a6cefbfb61c750a1b8ee2610bf71566bd719544" - integrity sha512-nqOOmEkovCQxNYGIyzhcwsmh4c7xnxe7RWdiYFOoml9MP4L32IlU3LdPC7r7nQEnnM+9Uxlk/UhtvBl5is6M/w== - dependencies: - "@types/cookie" "^0.3.3" - cookie "^0.4.0" - cookie-universal@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cookie-universal/-/cookie-universal-2.2.1.tgz#9ba3ffcfaa04afbfc0ba34d6cfba7fb56ef7f60f" @@ -8094,10 +8764,18 @@ core-js-compat@^3.12.1, core-js-compat@^3.20.2, core-js-compat@^3.21.0: browserslist "^4.19.1" semver "7.0.0" +core-js-compat@^3.22.1: + version "3.25.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.0.tgz#489affbfbf9cb3fa56192fe2dd9ebaee985a66c5" + integrity sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow== + dependencies: + browserslist "^4.21.3" + semver "7.0.0" + core-js-pure@^3.20.2: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" - integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== + version "3.25.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.0.tgz#f8d1f176ff29abbfeb610110de891d5ae5a361d4" + integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A== core-js@^2.4.0, core-js@^2.6.5: version "2.6.12" @@ -8401,7 +9079,7 @@ css-what@^5.1.0: css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== css@^2.1.0: version "2.2.4" @@ -8413,15 +9091,6 @@ css@^2.1.0: source-map-resolve "^0.5.2" urix "^0.1.0" -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssdb@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" @@ -8573,9 +9242,9 @@ cypress-tags@^0.3.0: through "^2.3.8" cypress@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.0.tgz#fae8d32f0822fcfb938e79c7c31ef344794336ae" - integrity sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg== + version "10.6.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.6.0.tgz#13f46867febf2c3715874ed5dce9c2e946b175fe" + integrity sha512-6sOpHjostp8gcLO34p6r/Ci342lBs8S5z9/eb3ZCQ22w2cIhMWGUoGKkosabPBfKcvRS9BE4UxybBtlIs8gTQA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -8665,15 +9334,6 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -data-urls@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.1.tgz#597fc2ae30f8bc4dbcf731fcd1b1954353afc6f8" - integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -8694,9 +9354,9 @@ date-fns@^1.27.2: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== date-fns@^2.16.1: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== + version "2.29.2" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.2.tgz#0d4b3d0f3dff0f920820a070920f0d9662c51931" + integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA== dateformat@^3.0.0: version "3.0.3" @@ -8709,9 +9369,9 @@ dateformat@^4.5.1: integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== dayjs@^1.10.4: - version "1.10.8" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.8.tgz#267df4bc6276fcb33c04a6735287e3f429abec41" - integrity sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow== + version "1.11.5" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== dayjs@~1.8.24, dayjs@~1.8.25: version "1.8.36" @@ -8724,9 +9384,9 @@ de-indent@^1.0.2: integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= deasync@^0.1.15: - version "0.1.24" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.24.tgz#6ecc9c6ff9eba64a4f4572ae3c4db77fed09268a" - integrity sha512-i98vg42xNfRZCymummMAN0rIcQ1gZFinSe3btvPIvy6JFTaeHcumeKybRo2HTv86nasfmT0nEgAn2ggLZhOCVA== + version "0.1.28" + resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.28.tgz#9b447b79b3f822432f0ab6a8614c0062808b5ad2" + integrity sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg== dependencies: bindings "^1.5.0" node-addon-api "^1.7.1" @@ -8868,6 +9528,14 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -8893,7 +9561,7 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== defu@^2.0.4: version "2.0.4" @@ -9039,13 +9707,13 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== dependencies: - acorn-node "^1.6.1" + acorn-node "^1.8.2" defined "^1.0.0" - minimist "^1.1.1" + minimist "^1.2.6" devalue@^2.0.1: version "2.0.1" @@ -9070,7 +9738,12 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff@5.0.0, diff@^5.0.0: +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== @@ -9080,6 +9753,11 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -9118,9 +9796,9 @@ doctrine@^3.0.0: esutils "^2.0.2" dom-accessibility-api@^0.5.6: - version "0.5.13" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" - integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== + version "0.5.14" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" + integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== dom-converter@^0.2.0: version "0.2.0" @@ -9261,7 +9939,7 @@ dset@^3.1.0: duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" @@ -9334,10 +10012,10 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.172: - version "1.4.180" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.180.tgz#380b06037836055d12c7de181ee90b8ed911c3e7" - integrity sha512-7at5ash3FD9U5gPa3/wPr6OdiZd/zBjvDZaaHBpcqFOFUhZiWnb7stkqk8xUFL9H9nk7Yok5vCCNK8wyC/+f8A== +electron-to-chromium@^1.4.202: + version "1.4.231" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.231.tgz#ae6de219c20aa690bc3d217ff151b208a9bd8ed6" + integrity sha512-E8WsUC60chToZUfxvVUXBb1U/mR/Df3GFX+mO3edtQnRTUt6L2XgpqBVWcGD/xrzQdINL1g/CEBPPn0YJ86Y6Q== electron-to-chromium@^1.4.71: version "1.4.75" @@ -9491,7 +10169,7 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.18.5, es-abstract@^1.19.0, es-abstract@^1.19.1: +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== @@ -9507,15 +10185,44 @@ es-abstract@^1.17.2, es-abstract@^1.18.5, es-abstract@^1.19.0, es-abstract@^1.19 is-callable "^1.2.4" is-negative-zero "^2.0.1" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-abstract@^1.19.5, es-abstract@^1.20.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" + is-weakref "^1.0.2" + object-inspect "^1.12.0" object-keys "^1.1.1" object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" es-module-lexer@^0.9.0: version "0.9.3" @@ -9997,11 +10704,16 @@ eventemitter2@5.0.1, eventemitter2@~5.0.1: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= -eventemitter2@^6.3.1, eventemitter2@^6.4.3: +eventemitter2@^6.3.1: version "6.4.5" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== +eventemitter2@^6.4.3: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + eventemitter2@~0.4.14: version "0.4.14" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" @@ -10132,6 +10844,17 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" +expect@^28.0.0: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + express@4.18.1: version "4.18.1" resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" @@ -10271,7 +10994,7 @@ extract-files@^9.0.0: extract-from-css@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92" - integrity sha1-HqffLnx8brmSL6COitrqSG9vj5I= + integrity sha512-41qWGBdtKp9U7sgBxAQ7vonYqSXzgW/SiAYzq4tdWSVhAShvpVCH1nyvPQgjse6EdgbW7Y7ERdT3674/lKr65A== dependencies: css "^2.1.0" @@ -10620,16 +11343,18 @@ follow-redirects@^1.14.8: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -10654,11 +11379,16 @@ fork-ts-checker-webpack-plugin@^6.1.1: semver "^7.3.2" tapable "^1.0.0" -form-data-encoder@1.7.1, form-data-encoder@^1.7.1: +form-data-encoder@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== +form-data-encoder@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.0.tgz#ee9afc735186a2c897005431c13b624cede616da" + integrity sha512-njK60LnfhfDWy+AEUIf9ZQNRAcmXCdDfiNOm2emuPtzwh7U9k/mo9F3S54aPiaZ3vhqUjikVLfcPg2KuBddskQ== + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -10845,11 +11575,26 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gauge@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.2.tgz#c3777652f542b6ef62797246e8c7caddecb32cc7" @@ -11136,7 +11881,7 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.0.0, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0: +glob@7.2.0, glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -11148,7 +11893,19 @@ glob@7.2.0, glob@^7.0.0, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glo once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: +glob@^7.1.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1, glob@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== @@ -11258,18 +12015,18 @@ globrex@^0.1.2: integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== got@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + version "12.3.1" + resolved "https://registry.yarnpkg.com/got/-/got-12.3.1.tgz#79d6ebc0cb8358c424165698ddb828be56e74684" + integrity sha512-tS6+JMhBh4iXMSXF6KkIsRxmloPln31QHDlcb6Ec3bzxjjFJFr/8aXdpyuLmVc9I4i2HyBHYw1QU5K1ruUdpkw== dependencies: - "@sindresorhus/is" "^4.6.0" + "@sindresorhus/is" "^5.2.0" "@szmarczak/http-timer" "^5.0.1" "@types/cacheable-request" "^6.0.2" "@types/responselike" "^1.0.0" cacheable-lookup "^6.0.4" cacheable-request "^7.0.2" decompress-response "^6.0.0" - form-data-encoder "1.7.1" + form-data-encoder "^2.0.1" get-stream "^6.0.1" http2-wrapper "^2.1.10" lowercase-keys "^3.0.0" @@ -11347,11 +12104,11 @@ graphql-tag@^2.11.0, graphql-tag@^2.12.6: tslib "^2.1.0" graphql-tools@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-8.3.0.tgz#720e9013542ee22a727c035dd658cc09c94851df" - integrity sha512-uH5eQczrAmx9JMm6NqdfVEyBkHXv4DTJryAsUIzbTeWk7WBb1p+waC+CFQva3uqIGt1xfyccqEDdMTNIlj6MYw== + version "8.3.3" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-8.3.3.tgz#2ef31c80bccf7b927e10c23fa87ad2e6b6aeccf3" + integrity sha512-p9ynDqcrzO20I4PFln6e2rhR7vEzb6a5FcBw04qwuDGqD1jVxIXmN5w5RUl+sSB+HcoOD1czMuZz5LNYJ3LIIg== dependencies: - "@graphql-tools/schema" "8.5.0" + "@graphql-tools/schema" "9.0.1" tslib "^2.4.0" optionalDependencies: "@apollo/client" "~3.2.5 || ~3.3.0 || ~3.4.0 || ~3.5.0 || ~3.6.0" @@ -11444,6 +12201,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -11454,11 +12216,23 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -11568,9 +12342,9 @@ header-case@^2.0.4: tslib "^2.0.3" headers-polyfill@^3.0.4: - version "3.0.7" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.0.7.tgz#725c4f591e6748f46b036197eae102c92b959ff4" - integrity sha512-JoLCAdCEab58+2/yEmSnOlficyHFpIl0XJqwu3l+Unkm1gXpFUYsThz6Yha3D6tNhocWkCPfyW0YVIGWFqTi7w== + version "3.0.10" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.0.10.tgz#51a72c0d9c32594fd23854a564c3d6c80b46b065" + integrity sha512-lOhQU7iG3AMcjmb8NIWCa+KwfJw5bY44BoWPtrj5A4iDbSD3ylGf5QcYr0ZyQnhkKQ2GgWNLdF2rfrXtXlF3nQ== helmet@^5.0.2: version "5.1.0" @@ -11618,9 +12392,9 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.1.0: lru-cache "^6.0.0" hosted-git-info@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" - integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== + version "5.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" + integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== dependencies: lru-cache "^7.5.1" @@ -11707,7 +12481,7 @@ html-webpack-plugin@^4.5.1: htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= + integrity sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg== htmlparser2@5.0.1: version "5.0.1" @@ -12057,7 +12831,7 @@ init-package-json@^2.0.2: inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= + integrity sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA== dependencies: source-map "~0.5.3" @@ -12120,9 +12894,9 @@ inquirer@^8.0.0: through "^2.3.6" inquirer@^8.2.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.1.tgz#e00022e3e8930a92662f760f020686530a84671d" - integrity sha512-pxhBaw9cyTFMjwKtkjePWDhvwzvrNGAw7En4hottzlPvz80GZaMZthdDU35aA6/f5FRZf3uhE057q8w1DE3V2g== + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -12138,6 +12912,7 @@ inquirer@^8.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" + wrap-ansi "^7.0.0" insert-module-globals@^7.0.0, insert-module-globals@^7.2.1: version "7.2.1" @@ -12198,6 +12973,11 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -12306,7 +13086,7 @@ is-builtin-module@^3.1.0: dependencies: builtin-modules "^3.0.0" -is-callable@^1.1.4, is-callable@^1.2.4: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== @@ -12472,11 +13252,6 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-https@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-https/-/is-https-3.0.2.tgz#4d24e002e47edd3f1b07f14bc722433354ccba49" - integrity sha512-jFgAKhbNF7J+lTMJxbq5z9bf1V9f8rXn9mP5RSY2GUEW5M0nOiVhVC9dNra96hQDjGpNzskIzusUnXwngqmhAA== - is-https@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-https/-/is-https-4.0.0.tgz#9ee725a334fb517b988278d2674efc96e4f348ed" @@ -12507,7 +13282,7 @@ is-lower-case@^2.0.2: dependencies: tslib "^2.0.3" -is-negative-zero@^2.0.1: +is-negative-zero@^2.0.1, is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -12620,6 +13395,13 @@ is-shared-array-buffer@^1.0.1: resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + is-ssh@^1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" @@ -12663,15 +13445,15 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.3, is-typed-array@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" - integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" + es-abstract "^1.20.0" + for-each "^0.3.3" has-tostringtag "^1.0.0" is-typedarray@^1.0.0, is-typedarray@~1.0.0: @@ -12703,7 +13485,7 @@ is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-weakref@^1.0.1: +is-weakref@^1.0.1, is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -12713,7 +13495,7 @@ is-weakref@^1.0.1: is-whitespace@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= + integrity sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -12960,6 +13742,16 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-docblock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" @@ -13008,6 +13800,11 @@ jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + jest-haste-map@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" @@ -13028,20 +13825,20 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-haste-map@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.1.tgz#471685f1acd365a9394745bb97c8fc16289adca3" - integrity sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ== +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^28.0.2" - jest-util "^28.1.1" - jest-worker "^28.1.1" + jest-util "^28.1.3" + jest-worker "^28.1.3" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: @@ -13084,9 +13881,9 @@ jest-localstorage-mock@^2.4.18: integrity sha512-TW7Cw6dbg4mgpxVUKmHU/sjOaUrUU2kp1DiWAY7JaPGDN1cRC/yXx1ewcJyPZ4d4qAd0UtJOER50sDjJSwVYGQ== jest-localstorage-mock@^2.4.21: - version "2.4.21" - resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.21.tgz#920aa6fc8f8ab2f81e40433e48e2efdb2d81a6e0" - integrity sha512-IBXPBufnfPyr4VkoQeJ+zlfWlG84P0KbL4ejcV9j3xNI0v6OWznQlH6Ke9xjSarleR11090oSeWADSUow0PmFw== + version "2.4.22" + resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.22.tgz#9d70be92bfc591c0be289ee2f71de1b4b2a5ca9b" + integrity sha512-60PWSDFQOS5v7JzSmYLM3dPLg0JLl+2Vc4lIEz/rj2yrXJzegsFLn7anwc5IL0WzJbBa/Las064CHbFg491/DQ== jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: version "27.5.1" @@ -13098,6 +13895,16 @@ jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-message-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" @@ -13113,18 +13920,18 @@ jest-message-util@^27.5.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" - integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^28.1.1" + pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" @@ -13278,7 +14085,7 @@ jest-snapshot@^27.5.1: jest-transform-graphql@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/jest-transform-graphql/-/jest-transform-graphql-2.1.0.tgz#903cb66bb27bc2772fd3e5dd4f7e9b57230f5829" - integrity sha1-kDy2a7J7wncv0+XdT36bVyMPWCk= + integrity sha512-oLVErzg6bN9eJPB/b8c1+0go3K1F1OZNkvlbUfOgK+96ulfX/fnp+4jI3tjQ1IUVL2XcSjhzwDwNdwsNI5EhRg== jest-transform-stub@^2.0.0: version "2.0.0" @@ -13309,12 +14116,12 @@ jest-util@^27.0.0, jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^28.0.0, jest-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" - integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== +jest-util@^28.0.0, jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -13380,17 +14187,17 @@ jest-watcher@^27.0.0, jest-watcher@^27.5.1: string-length "^4.0.1" jest-watcher@^28.0.0: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.1.tgz#533597fb3bfefd52b5cd115cd916cffd237fb60c" - integrity sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug== + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^28.1.1" + jest-util "^28.1.3" string-length "^4.0.1" jest-worker@^26.5.0: @@ -13411,10 +14218,10 @@ jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" - integrity sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ== +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -13445,14 +14252,14 @@ jju@^1.1.0: integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= js-beautify@^1.6.12, js-beautify@^1.6.14: - version "1.14.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d" - integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ== + version "1.14.6" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507" + integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw== dependencies: - config-chain "^1.1.12" + config-chain "^1.1.13" editorconfig "^0.15.3" - glob "^7.1.3" - nopt "^5.0.0" + glob "^8.0.3" + nopt "^6.0.0" js-cookie@^3.0.0: version "3.0.1" @@ -13482,7 +14289,7 @@ js-levenshtein@^1.1.6: js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" @@ -13504,11 +14311,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom-global@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-3.0.2.tgz#6bd299c13b0c4626b2da2c0393cd4385d606acb9" - integrity sha1-a9KZwTsMRiay2iwDk81DhdYGrLk= - jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -13542,39 +14344,6 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" - integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== - dependencies: - abab "^2.0.5" - acorn "^8.5.0" - acorn-globals "^6.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.1" - decimal.js "^10.3.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - ws "^8.2.3" - xml-name-validator "^4.0.0" - jsdom@^20.0.0: version "20.0.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" @@ -13679,7 +14448,7 @@ json-stable-stringify@^1.0.1: json-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= + integrity sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw== dependencies: jsonify "~0.0.0" @@ -13706,7 +14475,7 @@ json5@2.x, json5@^2.1.1, json5@^2.1.2: json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== json5@^1.0.1: version "1.0.1" @@ -13817,9 +14586,9 @@ keyv@^3.0.0: json-buffer "3.0.0" keyv@^4.0.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.2.tgz#e839df676a0c7ee594c8835e7c1c83742558e5c2" - integrity sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw== + version "4.4.1" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.4.1.tgz#5d97bae8dfbb6788ebc9330daf5eb6582e2d3d1c" + integrity sha512-PzByhNxfBLnSBW2MZi1DF+W5+qB/7BMpOokewqIvqS8GFtP7xHm2oeGU72Y1fhtfOv/FiEnI4+nyViYDmUChnw== dependencies: compress-brotli "^1.3.8" json-buffer "3.0.1" @@ -13911,7 +14680,7 @@ launch-editor@^2.3.0: lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== lazy@~1.0.11: version "1.0.11" @@ -14241,7 +15010,7 @@ lodash._reinterpolate@^3.0.0: lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.debounce@^4.0.8: version "4.0.8" @@ -14281,7 +15050,7 @@ lodash.isboolean@^3.0.3: lodash.isempty@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= + integrity sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg== lodash.isfunction@^3.0.9: version "3.0.9" @@ -14306,7 +15075,7 @@ lodash.isnumber@^3.0.3: lodash.isobject@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" - integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= + integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA== lodash.isplainobject@^4.0.6: version "4.0.6" @@ -14336,7 +15105,7 @@ lodash.memoize@4.x, lodash.memoize@^4.1.2: lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= + integrity sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A== lodash.merge@^4.6.2: version "4.6.2" @@ -14485,7 +15254,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.10.1, lru-cache@^7.5.1, lru-cache@^7.7.1: +lru-cache@^7.10.1: version "7.12.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== @@ -14495,10 +15264,15 @@ lru-cache@^7.3.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.4.0.tgz#2830a779b483e9723e20f26fa5278463c50599d8" integrity sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw== +lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.14.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.0.tgz#21be64954a4680e303a09e9468f880b98a0b3c7f" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== + lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== magic-string@^0.25.7: version "0.25.7" @@ -14566,9 +15340,9 @@ make-fetch-happen@^10.0.2: ssri "^8.0.1" make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.1.8" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz#3b6e93dd8d8fdb76c0d7bf32e617f37c3108435a" - integrity sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g== + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" cacache "^16.1.0" @@ -14906,20 +15680,20 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^4.0.0: +minimatch@4.2.1, minimatch@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== dependencies: brace-expansion "^1.1.7" +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" @@ -14943,12 +15717,12 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.5, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: +minimist@1.2.5, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.2.6: +minimist@^1.1.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -14972,9 +15746,9 @@ minipass-fetch@^1.3.0, minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: encoding "^0.1.12" minipass-fetch@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" - integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" minipass-sized "^1.0.3" @@ -15092,9 +15866,9 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: minimist "^1.2.5" mocha@^9.2.0: - version "9.2.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.1.tgz#a1abb675aa9a8490798503af57e8782a78f1338e" - integrity sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ== + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" @@ -15109,9 +15883,9 @@ mocha@^9.2.0: he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "3.0.4" + minimatch "4.2.1" ms "2.1.3" - nanoid "3.2.0" + nanoid "3.3.1" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -15228,9 +16002,9 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== msw@^0.43.0: - version "0.43.0" - resolved "https://registry.yarnpkg.com/msw/-/msw-0.43.0.tgz#10c6fc3fb1752c0a144179e5ab04c6a512cc9959" - integrity sha512-XJylZP0qW3D5WUGWh9FFefJEl3MGG4y1I+/8a833d0eedm6B+GaPm6wPVZNcnlS2YVTagvEgShVJ7ZtY66tTRQ== + version "0.43.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.43.1.tgz#57cb4af56f07442e8a6d14d76032a0ab41434256" + integrity sha512-wzhPpL6RsiYkyIUlTCg0aZY0aRZa4Eiubd6MOA5oJVgfuapDmvZrI8OMi4h4e+fpHD+Qsy+4unAjv3wpWia5yw== dependencies: "@mswjs/cookies" "^0.2.0" "@mswjs/interceptors" "^0.16.3" @@ -15284,12 +16058,7 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== -nanoid@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== - -nanoid@^3.1.23: +nanoid@3.3.1, nanoid@^3.1.23: version "3.3.1" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== @@ -15457,9 +16226,9 @@ node-gyp@^8.4.1: which "^2.0.2" node-gyp@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" - integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" + integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== dependencies: env-paths "^2.2.0" glob "^7.1.4" @@ -15524,10 +16293,10 @@ node-releases@^2.0.2: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== node-res@^5.0.1: version "5.0.1" @@ -15555,6 +16324,13 @@ nopt@^5.0.0: dependencies: abbrev "1" +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -15576,9 +16352,9 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: validate-npm-package-license "^3.0.1" normalize-package-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" - integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== dependencies: hosted-git-info "^5.0.0" is-core-module "^2.8.1" @@ -15632,13 +16408,20 @@ nouislider@^15.2.0: resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-15.5.1.tgz#3d6c5e73f85110b91d4e029d88fd8532aca98353" integrity sha512-V8LNPhLPXLNjkgXLfyzDRGDeKvzZeaiIx5YagMiHnOMqgcRzT75jqvEZYXbSrEffXouwcEShSd8Vllm2Nkwqew== -npm-bundled@^1.1.1, npm-bundled@^1.1.2: +npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + npm-check-updates@^12.2.1: version "12.5.0" resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-12.5.0.tgz#584c6d22c977f98a55988c7a662b82ea8550f474" @@ -15675,12 +16458,11 @@ npm-check-updates@^12.2.1: yaml "^1.10.2" npm-check-updates@^15.0.4: - version "15.0.4" - resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-15.0.4.tgz#4f06e26b8a6a2fc568bf8945f3cb31a4e5d1143c" - integrity sha512-Eb9FY9GfeCHQ+F6yqvynyBjLFETU4nTeECOK9P+IVM64P6Q0N1xrb2VYPFZJUOhVcxXo/ivRNh5wQZMuh0zZPA== + version "15.3.4" + resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-15.3.4.tgz#ec16f5b553dff5cf670b0126c7e4dff0f6246194" + integrity sha512-YZDcw0DFn5ggl7b9znZ7N0i+Q1HVIxW+eZlV7XvR+RIs367H+ytKCB4slAU33Bg9IljY7uv3dsFjV2npOt3GyA== dependencies: - chalk "^4.1.2" - cint "^8.2.1" + chalk "^5.0.1" cli-table "^0.3.11" commander "^9.3.0" fast-memoize "^2.5.2" @@ -15697,7 +16479,7 @@ npm-check-updates@^15.0.4: pacote "^13.6.1" parse-github-url "^1.0.2" progress "^2.0.3" - prompts-ncu "^2.5.0" + prompts-ncu "^2.5.1" rc-config-loader "^4.1.0" remote-git-tags "^3.0.0" rimraf "^3.0.2" @@ -15734,6 +16516,11 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" @@ -15783,14 +16570,14 @@ npm-packlist@^3.0.0: npm-normalize-package-bin "^1.0.1" npm-packlist@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + version "5.1.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== dependencies: glob "^8.0.1" ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: version "6.1.1" @@ -15838,9 +16625,9 @@ npm-registry-fetch@^13.0.0: proc-log "^2.0.0" npm-registry-fetch@^13.0.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" - integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== dependencies: make-fetch-happen "^10.0.6" minipass "^3.1.6" @@ -16242,12 +17029,12 @@ osenv@^0.1.4: ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== outpipe@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= + integrity sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA== dependencies: shell-quote "^1.4.2" @@ -16481,9 +17268,9 @@ pacote@^13.0.2: tar "^6.1.11" pacote@^13.6.1: - version "13.6.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" - integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== + version "13.6.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -16551,7 +17338,7 @@ parent-module@^1.0.0: parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= + integrity sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg== dependencies: path-platform "~0.11.15" @@ -16717,7 +17504,7 @@ path-parse@^1.0.7: path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= + integrity sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg== path-root-regex@^0.1.0: version "0.1.2" @@ -16737,9 +17524,9 @@ path-to-regexp@0.1.7: integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" - integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + version "6.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== path-type@^3.0.0: version "3.0.0" @@ -17698,12 +18485,12 @@ pretty-format@^27.0.0, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" - integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== dependencies: - "@jest/schemas" "^28.0.2" + "@jest/schemas" "^28.1.3" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -17716,7 +18503,7 @@ pretty-time@^1.1.0: pretty@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= + integrity sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w== dependencies: condense-newlines "^0.2.1" extend-shallow "^2.0.1" @@ -17774,10 +18561,10 @@ promptly@^2: dependencies: read "^1.0.4" -prompts-ncu@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/prompts-ncu/-/prompts-ncu-2.5.0.tgz#eae6bb7f5564aa3937b037df1096d6dd3b828346" - integrity sha512-a9WdInrG7zSlmfzDszmF3r8O4grZRI8+ChV0LtagHRT4dH7F+kxkrwFPGxeS83FZgAGBx3AXoLP+c4kGJb1P3w== +prompts-ncu@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prompts-ncu/-/prompts-ncu-2.5.1.tgz#0a75702e0af1d1319261113aad9153fd7267122a" + integrity sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA== dependencies: kleur "^4.0.1" sisteransi "^1.0.5" @@ -17850,7 +18637,7 @@ proxy-agent@~5.0.0: proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== proxy-from-env@^1.0.0: version "1.1.0" @@ -18145,7 +18932,7 @@ read-cmd-shim@^2.0.0: read-only-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= + integrity sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w== dependencies: readable-stream "^2.0.2" @@ -18188,14 +18975,14 @@ read-package-json@^4.1.1: npm-normalize-package-bin "^1.0.0" read-package-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== + version "5.0.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== dependencies: glob "^8.0.1" json-parse-even-better-errors "^2.3.1" normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" + npm-normalize-package-bin "^2.0.0" read-package-tree@^5.3.1: version "5.3.1" @@ -18393,6 +19180,13 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -18406,6 +19200,15 @@ regexp-tree@^0.1.24, regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -18423,6 +19226,18 @@ regexpu-core@^5.0.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -18549,7 +19364,7 @@ replaceall@^0.1.6: request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== dependencies: throttleit "^1.0.0" @@ -18667,16 +19482,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.2.0, resolve@^1.20.0, resolve@^1.4.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.0: +resolve@^1.1.4, resolve@^1.17.0, resolve@^1.22.0, resolve@^1.4.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -18685,6 +19491,15 @@ resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.2.0, resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -18693,9 +19508,9 @@ responselike@^1.0.2: lowercase-keys "^1.0.0" responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" @@ -18798,14 +19613,14 @@ rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.0.0, rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== +rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== dependencies: tslib "^2.1.0" -rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.4: +rxjs@^7.2.0, rxjs@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.4.tgz#3d6bd407e6b7ce9a123e76b1e770dc5761aa368d" integrity sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ== @@ -19128,9 +19943,9 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-cookie-parser@^2.4.6: - version "2.4.8" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" - integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== + version "2.5.1" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" + integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -19191,7 +20006,7 @@ shasum-object@^1.0.0: shasum@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= + integrity sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw== dependencies: json-stable-stringify "~0.0.0" sha.js "~2.4.4" @@ -19259,7 +20074,7 @@ side-channel@^1.0.4: sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -19427,7 +20242,7 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.3.3, socks@^2.6.1, socks@^2.6.2: +socks@^2.3.3, socks@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== @@ -19435,6 +20250,14 @@ socks@^2.3.3, socks@^2.6.1, socks@^2.6.2: ip "^1.1.5" smart-buffer "^4.2.0" +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -19477,14 +20300,6 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -19534,7 +20349,7 @@ sourcemap-codec@^1.4.4: spawn-command@^0.0.2-1: version "0.0.2-1" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spawn-please@^1.0.0: version "1.0.0" @@ -19732,7 +20547,7 @@ stream-browserify@^3.0.0: stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" @@ -19779,14 +20594,7 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" -strict-event-emitter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" - integrity sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w== - dependencies: - events "^3.3.0" - -strict-event-emitter@^0.2.4: +strict-event-emitter@^0.2.0, strict-event-emitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.4.tgz#365714f0c95f059db31064ca745d5b33e5b30f6e" integrity sha512-xIqTLS5azUH1djSUsLH9DbP6UnM/nI18vu8d43JigCQEoVsnY+mrlE+qv6kYqs6/1OkMnMIiL6ffedQSZStuoQ== @@ -19872,6 +20680,15 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" @@ -19880,6 +20697,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -20007,7 +20833,7 @@ stylehacks@^4.0.0: subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== dependencies: minimist "^1.1.0" @@ -20280,7 +21106,7 @@ terser-webpack-plugin@^5.1.3: source-map "^0.6.1" terser "^5.7.2" -terser@^4.1.2, terser@^4.6.13, terser@^4.6.3: +terser@^4.1.2, terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -20289,6 +21115,15 @@ terser@^4.1.2, terser@^4.6.13, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.6.13: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + terser@^5.3.4, terser@^5.7.2: version "5.14.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.0.tgz#eefeec9af5153f55798180ee2617f390bdd285e2" @@ -20337,7 +21172,7 @@ throat@^6.0.1: throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== through2@^2.0.0: version "2.0.5" @@ -20367,7 +21202,7 @@ time-fix-plugin@^2.0.7: timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= + integrity sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q== dependencies: process "~0.11.0" @@ -20425,7 +21260,7 @@ to-arraybuffer@^1.0.0: to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== to-fast-properties@^2.0.0: version "2.0.0" @@ -20547,9 +21382,9 @@ ts-jest@^27.1.3: yargs-parser "20.x" ts-jest@^28.0.5: - version "28.0.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.5.tgz#31776f768fba6dfc8c061d488840ed0c8eeac8b9" - integrity sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ== + version "28.0.8" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" + integrity sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" @@ -20560,7 +21395,7 @@ ts-jest@^28.0.5: semver "7.x" yargs-parser "^21.0.1" -ts-loader@^8.0.17, ts-loader@^8.1.0: +ts-loader@^8.0.17: version "8.3.0" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== @@ -20571,6 +21406,17 @@ ts-loader@^8.0.17, ts-loader@^8.1.0: micromatch "^4.0.0" semver "^7.3.4" +ts-loader@^8.1.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.4.0.tgz#e845ea0f38d140bdc3d7d60293ca18d12ff2720f" + integrity sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^4.0.0" + loader-utils "^2.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + ts-log@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.4.tgz#d672cf904b33735eaba67a7395c93d45fba475b3" @@ -20596,9 +21442,9 @@ ts-node@^10.4.0, ts-node@^10.5.0: yn "3.1.1" ts-node@^10.8.2: - version "10.8.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" - integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -20767,9 +21613,9 @@ type-fest@^1.0.1, type-fest@^1.2.2: integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.13.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.16.0.tgz#1250fbd64dafaf4c8e405e393ef3fb16d9651db2" - integrity sha512-qpaThT2HQkFb83gMOrdKVsfCN7LKxP26Yq+smPzY1FqoHRjqmjqHXA7n5Gkxi8efirtbeEUxzfEdePthQWCuHw== + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-is@~1.6.18: version "1.6.18" @@ -20797,9 +21643,9 @@ typescript@^4.4.3, typescript@^4.5.4: integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + version "4.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" + integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== typescript@~4.2: version "4.2.4" @@ -20851,6 +21697,16 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -20932,6 +21788,13 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -20939,6 +21802,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -21062,10 +21932,10 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -21376,11 +22246,6 @@ vue-demi@0.13.1: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.1.tgz#7604904c88be338418a10abbc94d5b8caa14cb8c" integrity sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg== -vue-demi@^0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.4.tgz#420dd17628f95f1bbce1102ad3c51074713a8049" - integrity sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ== - vue-eslint-parser@^8.2.0: version "8.3.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" @@ -21496,7 +22361,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@2.6.14, vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14, vue-template-compiler@^2.6.x: +vue-template-compiler@2.6.14, vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14: version "2.6.14" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== @@ -21514,7 +22379,7 @@ vue2-leaflet@^2.5.2: resolved "https://registry.yarnpkg.com/vue2-leaflet/-/vue2-leaflet-2.7.1.tgz#2f95c287621bf778f10804c88223877f5c049257" integrity sha512-K7HOlzRhjt3Z7+IvTqEavIBRbmCwSZSCVUlz9u4Rc+3xGCLsHKz4TAL4diAmfHElCQdPPVdZdJk8wPUt2fu6WQ== -vue@2.6.14, vue@^2.6.11, vue@^2.6.12, vue@^2.6.14: +vue@2.6.14, vue@^2.6.11, vue@^2.6.12: version "2.6.14" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== @@ -21790,14 +22655,6 @@ whatwg-mimetype@^3.0.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== -whatwg-url@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" - integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-url@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" @@ -21840,16 +22697,16 @@ which-module@^2.0.0: integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-typed-array@^1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" - integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" + es-abstract "^1.20.0" + for-each "^0.3.3" has-tostringtag "^1.0.0" - is-typed-array "^1.1.7" + is-typed-array "^1.1.9" which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" @@ -21973,9 +22830,9 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: typedarray-to-buffer "^3.1.5" write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" @@ -22030,7 +22887,7 @@ write-pkg@^4.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.2.3, ws@^8.3.0: +ws@^8.3.0: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== @@ -22161,11 +23018,16 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^21.0.0, yargs-parser@^21.0.1: +yargs-parser@^21.0.0: version "21.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== +yargs-parser@^21.0.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -22206,7 +23068,7 @@ yargs@^15.0.1, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.0, yargs@^17.2.1, yargs@^17.3.1: +yargs@^17.0.0, yargs@^17.3.1: version "17.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== @@ -22219,6 +23081,19 @@ yargs@^17.0.0, yargs@^17.2.1, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.0.0" +yargs@^17.2.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yauzl@^2.10.0, yauzl@^2.8.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"